VB6工程計算機程式設計

2018年12月02日

首頁 | 如何使用Excel試算表作程式資料輸入 | 如何繪製等高線 | 解3D隱函數 | 工程仲裁案例說明 | Spline_Bezier曲線測繪 | VB6工程計算機程式設計 | VB NET工程計算機程式設計 | 如何在VB6中使用Vbscript & Dll | 徐昇多邊形 | 物件導向程式簡介 | 如何在VB6使用VB.net圖案筆刷及顏色表 | VB Net Graphics method(B) | Graphic method in vb net(A)

上次修改此網站的日期: 2018年12月02日

第十五章  VB 6.0電算機及2D函數圖繪製

程式設計簡介

15.1 前言

   一般簡易之電算機,多可以做加、減、乘及除、開平方及反數(1/x)的功能,先進一點的電算機,則會再提供三角函數、反三角函數、對數等計算功能。下圖為Windows所提供之 標準型及工程型電算機(小算盤)。要在Windows offices程式中使用一般小算盤時,可在Windows螢幕下方,點按[開始]→所有程式→附屬所有程式→小算盤。 開啟一般小算盤後,可在檢視(Y)下拉對話方塊中選取工程型小算盤,使用完畢後只要按小算盤上的「關閉」鈕即可。

 

 

   

本章所要介紹之電算機屬科學用或工程用類型,舉凡一般科學上或工程上用得到之函數多包括在內。另外在測量工程用到之度、分、秒量測單位也一併介紹。下圖為作者所設計設計之科學電算機畫面。

 

 

15.2科學電算機功能及程式設計介紹

    本章要介紹之科學電算機功能多,計算能力強,因其有計算方程式及函數值的功能,因此需使用到前面介紹過的VBscript控制項。為方便初學者熟悉函數及圖形繪製,另外又設計簡易之二維函數圖製作,唯對二維內隱型(Implicit function)及三維函數圖繪製有興趣之讀者,可參考編者另外一本即將出版之函數圖(二維及三維、tube plot)繪圖程式書籍。

15.2.1指令按鈕及功能鍵介紹

 

為方便介紹,特將電算機之功能鍵及按鈕標題,依出現先後位置抄錄如下。

txtInput

Row

Col0

Col1

Col2

Col3

Col4

Col5

Col6

Row0

(

)

Exp

C

AC

BackS

開啟圖框

Row1

Sin

Cos

Tan

7

8

9

+

Row2

Csc

Sec

Cot

4

5

6

_

Row3

SinD

CosD

TanD

1

2

3

*

Row4

CscD

SecD

CotD

0

.

±

/

Row5

SinS

CosS

TanS

^y

1/x

N

\

Row6

CscS

SecS

CotS

e

Pi

Ra

Da

Row7

Asin

Acos

Atan

d

m

s

Row8

Acsc

Asec

Acot

Sqr

Abs

Sgn

Modxy

Row9

AsinD

AcosD

AtanD

Even

Odd

Ceil

Floor

Row10

AcscD

AsecD

AcotD

Lcm

Gcd

Int

Fix

Row11

SinH

CosH

TanH

Frac

Log10

LogN

Log

Row12

CscH

SecH

AcotH

Atan2

=

)=

)=

Row13

AsinH

AcosH

AtanH

Atn2D

Min(0)

Min(1)

Min(2)

Row14

AcscH

AsecH

AcotH

Mc

Mo(0)

Mo(1)

Mo(2)

txtShow

 

下表為對照於上表之指令按鈕名稱。

 

Row

Col0

Col1

Col2

Row0

CmdLeftBrk

CmdRightBrk

CmdExp

Row1

Cmdfunc(0)

Cmdfunc(1)

Cmdfunc(2)

Row2

Cmdfunc(3)

Cmdfunc(4)

Cmdfunc(5)

Row3

Cmdfunc(6)

Cmdfunc(7)

Cmdfunc(8)

Row4

Cmdfunc(9)

Cmdfunc(10)

Cmdfunc(11)

Row5

Cmdfunc(12)

Cmdfunc(13)

Cmdfunc(14)

Row6

Cmdfunc(15)

Cmdfunc(16)

Cmdfunc(17)

Row7

Cmdfunc(18)

Cmdfunc(19)

Cmdfunc(20)

Row8

Cmdfunc(21)

Cmdfunc(22)

Cmdfunc(23

Row9

Cmdfunc(24)

Cmdfunc(25)

Cmdfunc(26)

Row10

Cmdfunc(27)

Cmdfunc(28)

Cmdfunc(29)

Row11

Cmdfunc(30)

Cmdfunc(31)

Cmdfunc(32)

Row12

Cmdfunc(33)

Cmdfunc(34)

Cmdfunc(35)

Row13

Cmdfunc(36)

Cmdfunc(37)

Cmdfunc(38)

Row14

Cmdfunc(39)

Cmdfunc(40)

Cmdfunc(41)

 

 

Row

Col3

Col4

Col5

Col6

Row0

CmdCls1

CmdClsAll

CmdBackSpace

CmdOpenPic

Row1

Cmdnum(7)

Cmdnum(8)

Cmdnum(9)

Cmdoper(0)

Row2

Cmdnum(4)

Cmdnum(5)

Cmdnum(6)

Cmdoper(1)

Row3

Cmdnum(1)

Cmdnum(2)

Cmdnum(3)

Cmdoper(2)

Row4

Cmdnum(0)

Cmddecimal

CmdPlusMinus

Cmdoper(3)

Row5

CmdPower

CmdXinverse

CmdFactor

Cmdoper(4)

Row6

CmdEConst

CmdPiConst

CmdRaConst

CmdDaConst

Row7

Cmdcomma

CmdDeg

CmdMin

CmdSec

Row8

Cmdfunc(44)

Cmdfunc(45)

Cmdfunc(46)

Cmdfunc(47)

Row9

Cmdfunc(48)

Cmdfunc(48)

Cmdfunc(49)

Cmdfunc(49)

Row10

Cmdfunc(50)

Cmdfunc(51)

Cmdfunc(52)

Cmdfunc(53)

Row11

Cmdfunc(54)

Cmdfunc(55)

Cmdfunc(56)

Cmdfunc(57)

Row12

Cmdfunc(42)

CmdEqual

CmdRBEqual

CmdDBrEqual

Row13

Cmdfunc(43)

CmdEqual

CmdRBEqual

CmdDBrEqual

Row14

Cmdfunc(44)

CmdEqual

CmdRBEqual

CmdDBrEqual

 

下表為三角函數及反三角函數等資料輸入及輸出類型說明

 

函數型態

標題

輸入資

料型態

輸出資

料型態

備註

三角函數

Cmdfunc(0)~(5)

弳度

數值

Sin(1.57)

三角函數

Cmdfunc(6)~(11)

角度

數值

SinD(45)

三角函數

Cmdfunc(12)~(17)

度分秒(dms)

數值

SinS(45d50m6s)

反三角函數

Cmdfunc(18)~(23)

數值

弳度

 

反三角函數

Cmdfunc(24)~(29)

數值

角度

 

SinH

Cmdfunc(30)~(35)

數值

數值

 

ASinH

Cmdfunc(36)~(41)

數值

數值

 

Atan2

Cmdfunc(42)

數值,數值

弳度

 

Atn2D

Cmdfunc(43)

數值,數值

角度

 

其他

Cmdfunc(44)~(57)

數值

數值

 

   

如需使用到函數繪圖功能,則點按開啟圖框功能鍵,就能開啟及使用到函數繪圖功能,開啟圖框後整個畫面如下圖所示。

 

15.2.2程式設計

    電算機程式設計內容繁雜,如要一一說明並不容易,在此我們將其分為兩部份來說明:

 

(a) 加、減、乘、除四則運算:

 

   以計算 5+7=12為例,必須使用到指令按鈕(1)數字5 [Cmdnum(5)](2)運算子+[ CmdOper(0)](3)數字7 [Cmdnum(7)](4)等號= [Cmdequal]四個指令按鈕,因此其程序設計可考慮如下。

 

數字(0~9)按鈕可設計成cmdnum(Index)陣列,分別以指數Index(0~9)代表數字。運算子為CmdOper(Index)指數Index(0~5)分別代表運算子(+、-、×、/\)。等號則配合計算式中是否有左括弧,而分為”=”之Cmdequal,含右括弧”=)”之CmdRBEqual,含雙引號及右括弧” "=)”之CmdDBrEqual三種。因此”3+5”須採用”=”;”3*(2+9”須採用”)=”;”SinS(56d43m48s須採用"=)”配合,否則會出現語法錯誤(invalid expression)訊息。

 

(1).數字指令程序

 

Private Sub cmdnum_Click(Index As Integer)

If txtInput.Text = "0" Then txtInput.Text = ""

txtInput.Text = txtInput.Text & Index

End Sub

 

(2).運算子指令程序

 

Private Sub cmdoper_Click(Index As Integer)

On Error Resume Next

If Mid(txtShow.Text, Len(txtShow.Text), 1) <> ")" Then txtShow.Text = txtShow.Text + txtInput.Text

txtInput.Text = "0"   '開始時txtInput顯示為0

txtShow.Text = txtShow.Text + cmdoper(Index).Caption 

End Sub

 

(3).等號指令程序

 

Private Sub cmdequal_Click()  '按等號得答案

Dim starrey() As String, Xtpt As Double, Ytpt As Double

Dim StTpt As String

On Error Resume Next

Dim expression As String

Dim com As Control

StTpt = Trim$(txtShow.Text)

starrey = Split(StTpt, "(", -1, vbTextCompare) '輸入資料分離

Select Case glIndex

Case 42, 43   ' Atan2()Atn2D

starrey = Split(starrey(1), ",", -1, vbTextCompare)

Ytpt = Val(starrey(0))

Xtpt = Mid(starrey(1), 1, Len(starrey(1)) - 1)

'MsgBox ("ytpt=" & Ytpt)

'MsgBox ("xtpt=" & Xtpt)

 If glIndex = 42 Then txtInput.Text = Round(Atan2(Ytpt, Xtpt), 10) 'Atan2(y,x)

 If glIndex = 43 Then txtInput.Text = Round(Atn2D(Ytpt, Xtpt), 10) 'Atn2D(y,x)

GoTo 60

 

Case 47  'Modxy()

starrey = Split(starrey(1), ",", -1, vbTextCompare)

Ytpt = Val(starrey(0))

Xtpt = Mid(starrey(1), 1, Len(starrey(1)) - 1)

txtInput.Text = Round((Ytpt Mod Xtpt), 10)

GoTo 60

.

.

.

.

Case Else

50 If IsOper(Mid(txtShow.Text, Len(txtShow.Text), 1)) = True And CmdLeftBrk.Enabled = True Then txtShow.Text = txtShow.Text + txtInput.Text

55 expression = EditedEqu(txtShow.Text)

If IsValid(expression, False, False, False) = False Then MsgBox ("Invalid expression"): Exit Sub

 Call Init(expression)

txtInput.Text = Round(StrGetVal(0, 0, 0, 0), 10)

End Select

60 cmdequal.Enabled = True

CmdClsAll.Enabled = True

txtInput.Enabled = True

txtShow.Enabled = True

AnsResult = Round(Val(txtInput.Text), 10)

glIndex = -100

End Sub

   

上述數求最小公倍數及最大公約數,原規劃只求兩數的最小公倍數及最大公約數,讀者可以將其改為較多數之求法。

 

(b) 函數計算:

 

    三角函數、反三角函數、對數、雙曲線函數(SinH,CosH)等,因語法(systax)需要,必須使用到對稱之左右小括弧,如Sin()Asin()AsinH()Exp()等,如函數指令標題(Caption)名稱為”Sin(“或”Asin(“,或”AsinH(“或”Exp(,則等號指令標題須以”)=”配合。另函數SinS()CosS()TanS()等,因函數之引數(Argument)為文字度分秒(dms),故函數指令標題如為”SinS("”,”CosS("”,”TanS("”,故等號需以”")”配合。

 

(1).函數指令程序

 

Private Sub cmdfunc_Click(Index As Integer)

glIndex = Index

If Index >= 12 And Index <= 17 Then

txtShow.Text = txtShow.Text + cmdfunc(Index).Caption + "("""

Else

txtShow.Text = txtShow.Text + cmdfunc(Index).Caption + "("

End If

End Sub

 

(2).右括弧等號指令程序

 

Private Sub CmdRBEqual_Click()

txtShow.Text = txtShow.Text + txtInput.Text + ")"

Call cmdequal_Click

txtShow.Text = txtShow.Text & "= " & Round(AnsResult, 10)

End Sub

 

(3).引號右括弧等號指令程序

 

Private Sub CmdDRBEqual_Click()

txtShow.Text = txtShow.Text + txtInput.Text + """)"

Call cmdequal_Click

txtShow.Text = txtShow.Text & "= " & Round(AnsResult, 10)

End Sub

 

15.3二維函數圖繪製介紹

    二維函數指的是兩個變數,一個主變數及一個附屬變數的函數。二維函數可簡單概分為(1)外顯型函數(Explicit functions)(2)內隱型函數(Implicit functions)兩大類。一般其類型為y=f(x),如y=x+tan(x);或為x=f(y)類型,如y=x*sin(x);或參數類型x=x(t)y=y(t),如x=3sin(t);或如y=3*cos(t)者;或為極座標形式的類型,如以r(t)=e-4cos(4t)+sin(t/4)表示者。主變數與副變數如為一對一關係者,多屬外顯型函數;另函數只能以類似f(x,y)=0表示者,如x+(y-4)-4=0,主變數與副變數非為一對一的,而為多值型就是所謂內隱型函數。外顯型函數因兩變數間為一對一關係,且不必像三維函數圖必須考慮隱藏線及背面去除問題,故其函數圖繪製非常簡單;而內隱型函數一般多必須先假定一個變數已知,然後求另一變數值,其解答可能有許多組,因此作業程序比較複雜。外顯型三維函數可以說是二維函數外顯型的延伸或推廣,因此適用在二維函數圖繪製的演算法,多可適用在三維函數作業中。一般y=f(x)x=f(y)類型,多可以參數型式表示,如x=t以表示,則y=f(t),如y=t表示,則x=f(t)

15.4外顯型函數圖繪製

外顯型函數因兩變數間為一對一關係,函數圖繪製非常簡單。下面我們就介紹y=f(x) x=f(y) x=x(t)y=y(t) r=r(t)類型類型的外顯型函數圖繪製。

15.3.1 y=f(x)類型函數圖繪製

y=f(x)二維類型函維圖繪製,因為其兩變數純為一對一,故製圖作業既簡單又單純,在此不特別介紹其詳細演算程序,讀者只要閱讀下面的程序碼便能瞭解一切。

 

Sub Form_Load()

glNumberOfTriangles = 0

glXbeg = -10   ‘變數x起點值

glXend = 10    ‘變數x終點值

gldX = 0.25    ‘變數x每次計算增量

glYbeg = -10    ‘變數y起點值

glYend = 10     ‘變數y終點值

gldY = 0.25     ‘變數y每次計算增量

gltbeg = -10     ‘變數t起點值

gltend = 10     ‘變數t終點值

gldt = 0.25     ‘變數t每次計算增

glnumX = (glXend - glXbeg) / gldX

glnumY = (glYend - glYbeg) / gldY

glnumt = (gltend - gltbeg) / gldt

PicCanvas.ScaleMode = 0

PicCanvas.AutoRedraw = True

PicCanvas.Scale (glXbeg, glYend)-(glXend, glYbeg)

Randomize

End Sub

 

Private Sub PlotNormalX()

Dim I As Integer

Dim Pts() As Point2D

ReDim Pts(1 To glnumX)

glColoruse = RGB(Rnd * 250, Rnd * 250, Rnd * 250)  '線條顏色

For I = 1 To glnumX 

Pts(I).x = glXbeg + (I - 1) * gldX

Pts(I).y = glFx(Pts(I).x)  '定義的外顯型函數y=f(x)

If I = 1 Then

PicCanvas.PSet (Pts(I).x, Pts(I).y)

Else

PicCanvas.Line -(Pts(I).x, Pts(I).y), glColoruse

End If

Next I

End Sub

 

 

15.4.2 x=f(y)類型函數圖繪製

    此類似函數圖製作與上節所介紹的y=f(x)極為相似,差別只在兩變數位置互換而已。

 

Sub PlotNormalY()

Dim I As Integer

Dim Pts() As Point2D

ReDim Pts(1 To glnumY)

glColoruse = RGB(Rnd * 250, Rnd * 250, Rnd * 250)  '線條顏色

For I = 1 To glnumY

Pts(I).y = glYbeg + (I - 1) * gldY

Pts(I).x = glFy(Pts(I).y) '定義的外顯型函數x=f(y)

If I = 1 Then

PicCanvas.PSet (Pts(I).x, Pts(I).y)

Else

PicCanvas.Line -(Pts(I).x, Pts(I).y), glColoruse

End If

Next I

End Sub

 

15.4.3 x=x(t)y=y(t)類型

    參數型函數x=x(t)y=y(t)圖型的繪製、與y=f(x)x=f(y)類型相差不大,給定主變數t後,xy值便能求得。

 

Sub PlotParametric()

Dim t As Single, I As Integer

Dim Pts() As Point2D

ReDim Pts(1 To glnumt)

glColoruse = RGB(Rnd * 250, Rnd * 250, Rnd * 250)  '線條顏色

For I = 1 To glnumt

t = gltbeg + (I - 1) * gldt

Pts(I).x = glFt_x(t)   '定義的參數函數x=f(t)

Pts(I).y = glFt_y(t)   '定義的參數函數y=f(t)

If I = 1 Then

PicCanvas.PSet (Pts(I).x, Pts(I).y)

Else

PicCanvas.Line -(Pts(I).x, Pts(I).y), glColoruse

End If

Next I

End Sub

 

 

15.4.4 r=r(t)類型

極座標型函數為極為特殊型態的二維函數,其數學表示法非常簡便,如中心在(0,0)的半徑為2單位的圓形,其數學公式為ρ(θ)=2。而中心在(1,2)的半徑為2單位的圓形,則公式為

ρ(θ)=

 

 

ρ(θ)=

 

兩者都代表相同的圓。一般矩形(x,y)座標轉換為極座標(ρ,θ)時其關係為:

 

ρ=

θ=tan

 

極座標(ρ,θ)轉換為矩形(x,y)座標時則關係為:

 

x=ρcos(θ)

y=ρsin(θ)

=ρ

    有關極座標的函數圖繪製VB程序碼,披露如下供讀者參考:

 

Private Sub PlotPolar(color As Long, tStart As Single, tEnd As Single)

Dim x As Single, y As Single

Dim i As Integer, steps As Integer, t As Single, rl As Single

Dim dt As Single

Dim xmin_t As Single, xmax_t As Single, ymin_t As Single, ymax_t As Single

 

On Error GoTo errhandler

steps = 640

dt = (tEnd - tStart) / steps

xmin_t = 999999#

xmax_t = -999999#

ymin_t = 999999#

ymax_t = -999999#

For i = 1 To steps 'Do While t <= tEnd  '

t = tStart + (i - 1) * dt

rl = glFrt(CDbl(t))

x = rl * Cos(t)

y = rl * Sin(t)

If x > xmax_t Then xmax_t = x

If x < xmin_t Then xmin_t = x

If y > ymax_t Then ymax_t = y

If y < ymin_t Then ymin_t = y

       If (i = 1 Or ltest > 2 * gldt) Then

       PicCanvas.PSet (x, y)

       Else

       PicCanvas.Line -(x, y), color

       End If

  Next i

Txtxmin_t.Text = xmin_t

Txtxmax_t.Text = xmax_t

Txtymin_t.Text = ymin_t

Txtymax_t.Text = ymax_t

Exit Sub

errhandler:

Error = True

Resume Next

End Sub

 

 

 

下面為繪圖程式函數圖繪製程式中幾個重要程序如座標軸(矩形及極座標)、刻度及單位標示、等之程序碼供讀者參考。

 

Private Sub CmdPolar_Click()’畫極座標類型函數圖

Dim stIn As String, St1 As String, St2 As String, expXY As String

Dim tBeg As Double, tEnd As Double

Dim STresult() As String

If txtEQInput.Text = "" Then

MsgBox ("尚未選取或輸入方程式及變數範圍,請重來")

Exit Sub

End If

stIn = txtEQInput.Text

STresult = Split(stIn, "=", -1, vbTextCompare)

If UBound(STresult) <> 1 Then

MsgBox ("資料有問題???,請重來")

Exit Sub

End If

expXY = STresult(1)

tBeg = Val(txttBeg.Text)

tEnd = Val(txttEnd.Text)

PicGraph.DrawWidth = Val(txtDrawwidth)

Call drawPolar(expXY, colorPlot, tBeg, tEnd)

txtShow = stIn

txtEQInput.Text = ""

End Sub

 

Private Sub CmdClosePic_Click() ‘關閉圖框

Frame1.Visible = False

PicGraph.Visible = False

txtInput.Visible = False

Label1.Visible = False

CmdPolar.Visible = False

CmdParameter.Visible = False

PicHruler.Visible = False

PicVruler.Visible = False

OptPolar(0).Visible = False

OptPolar(1).Visible = False

OptPolar(1).value = False

FrmEngCal.Width = 4800

txtShow.Width = FrmEngCal.Width - 200

txtInput.Width = FrmEngCal.Width - 200

Label3.Visible = False

List1.Visible = False

CmdPolar.Enabled = False

CmdParameter.Enabled = False

CmdClosePic.Enabled = False

CmdOpenPic.Enabled = True

txtInput.Text = ""

txtShow.Text = ""

CmdClosePic.Visible = False

End Sub

 

Private Sub CmdOpenPic_Click() ’開啟圖框

.

.

.

.

rue

End Sub

 

Private Sub Form_Load() ’載入表單(資料初始化)

glXmax = 10

glXmin = -10

glYmax = 10

glYmin = -10

PicGraph.AutoRedraw = True

gl主格間距x = 2#

gl副格間距x = 0.5

gl主格間距y = 2#

gl副格間距y = 0.5

gl軸線顏色 = vbRed

gl刻度顏色 = vbMagenta

gl遮蓋顏色 = vbBlue

gl主格線色 = &H808080

gl副格線色 = &HC0C0C0

gl軸線線型 = 0

gl軸線寬 = 1

gl座標類型 = 0

gl主格線型 = 0

gl顯主格線嗎 = True

gl顯副格線嗎 = True

glx弳度 = False

gly弳度 = False

 

Call createCoordinates

'Private Sub form_load()

Call Init("")

'Option1(0) = True

'FctINput = 1#

'Option2(0) = True

'FctOutPut = 1#

PicGraph.Scale (-10, 10)-(10, -10)

PicGraph.AutoRedraw = True

Frame1.Visible = False

PicGraph.Visible = False

txtEQInput.Visible = False

Label1.Visible = False

 

Label3.Visible = False

List1.Visible = False

CmdPolar.Visible = False

CmdParameter.Visible = False

PicHruler.Visible = False

PicVruler.Visible = False

OptPolar(0).Visible = False

OptPolar(1).Visible = False

CmdClosePic.Visible = False

FrmEngCal.Width = 4800

txtShow.Width = FrmEngCal.Width - 200

txtEQInput.Width = FrmEngCal.Width - 200

 

txtEQInput.Text = ""

Randomize

   colorPlot = RGB(Rnd * 250, Rnd * 250, Rnd * 250)

   PicGraph.DrawWidth = 2

End Sub

 

Private Sub 座標及格線()

.

.

.

.

200      End Sub

     

Private Sub 畫副格線(Nsecx As Integer, Nsecy As Integer)

Dim i As Integer, Xi As Double, Yi As Double

Select Case gl座標類型 '0為矩形;1為極座標

Case 0   '矩形座標

Select Case glx弳度

Case False

For i = 1 To Nsecx * 4

      Xi = 0 + (i - 1) * gl副格間距x

           PicGraph.Line (Xi, -200)-(Xi, 200), gl副格線色

Next i

For i = 1 To Nsecx * 4

      Xi = 0 - (i - 1) * gl副格間距x

           PicGraph.Line (Xi, -200)-(Xi, 200), gl副格線色

Next i

Case True

For i = 1 To Nsecx * 4

      Xi = 0 + (i - 1) * gl副格間距x * pi / 2

           PicGraph.Line (Xi, -200)-(Xi, 200), gl副格線色

Next i

For i = 1 To Nsecx * 4

      Xi = 0 - (i - 1) * gl副格間距x * pi / 2

           PicGraph.Line (Xi, -200)-(Xi, 200), gl副格線色

Next i

End Select

 

Select Case gly弳度

Case False

.

.

.

.

 

End Select

 

Case 1 '1為極座標

Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double, Radi As Double, AngI As Double, Nang As Integer

 

Select Case glx弳度

Case False

      For Radi = gl副格間距x To 200 Step gl副格間距x

      PicGraph.Circle (0, 0), Radi, gl副格線色

       Next Radi

Case True

     For Radi = gl副格間距x * pi / 2 To 200 Step gl副格間距x * pi / 2

      PicGraph.Circle (0, 0), Radi, gl副格線色

       Next Radi

End Select

 

   End Select

     

End Sub

 

Private Sub 畫主格線(Nsecx As Integer, Nsecy As Integer)

Dim i As Integer, Xi As Double, Yi As Double

Select Case gl座標類型 '0為矩形;1為極座標

Case 0   '矩形座標

Select Case glx弳度

Case False

For i = 1 To Nsecx * 4

      Xi = 0 + (i - 1) * gl主格間距x

           PicGraph.Line (Xi, -200)-(Xi, 200), gl主格線色

Next i

For i = 1 To Nsecx * 4

      Xi = 0 - (i - 1) * gl主格間距x

           PicGraph.Line (Xi, -200)-(Xi, 200), gl主格線色

Next i

Case True

End Select

 

Select Case gly弳度

Case False

For i = 1 To Nsecy * 4 + 1

      Yi = 0 + (i - 1) * gl主格間距y

      PicGraph.Line (-200, Yi)-(200, Yi), gl主格線色

Next i

For i = 1 To Nsecy * 4 + 1

      Yi = 0 - (i - 1) * gl主格間距y

      PicGraph.Line (-200, Yi)-(200, Yi), gl主格線色

Next i

Case True

.

.

.

.

End Select

 

Case 1 '1為極座標

Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double, Radi As Double, AngI As Double, Nang As Integer

 

Select Case glx弳度

Case False

      'For Radi = gl主格間距 To glXmax * 16.1 Step gl主格間距

      For Radi = gl主格間距x To 200 Step gl主格間距x

      PicGraph.Circle (0, 0), Radi, gl主格線色

       Next Radi

Case True

    .

.

.

End Select

     Dim Angtpt As Integer, Ndo As Integer

     Ndo = 360 / gl角度間距 + 1

     For i = 1 To Ndo

     Angtpt = i * gl角度間距

     If Angtpt > 360# Then Exit For

     x1 = Cos(Angtpt * Ra)

     y1 = Sin(Angtpt * Ra)

     If Angtpt Mod 90 = 0 Then GoTo 100

     x2 = 200 * Cos(Angtpt * Ra)

     y2 = 200 * Sin(Angtpt * Ra)

     PicGraph.Line (x1, y1)-(x2, y2), gl主格線色

100    Next i

   End Select

     

End Sub

 

    

 

Private Sub 水平尺()

Dim i As Integer, Xi As Double, Nsecx As Integer, Nsecx As Integer

Nsecx = Abs(glXmax - glXmin) / gl主格間距x + 1

Nsecx = Abs(glXmax - glXmin) / gl副格間距x + 1

PicHruler.Scale (glXmin * 1.1, 1#)-(glXmax * 1.1, -1#)

'picHruler.Line (glxmin, -0.95)-(8.1 * glXmax, -0.95), vbRed

PicHruler.Line (-100, -0.95)-(100, -0.95), vbRed

Select Case glx弳度

Case False

For i = 1 To Nsecx * 4 + 1  '主格線

   Xi = 0 + (i - 1) * gl副格間距x

   PicHruler.Line (Xi, -0.95)-(Xi, 0.001), gl副格線色

   

Next i

For i = 1 To Nsecx * 4 + 1   '副格線

   Xi = 0 - (i - 1) * gl副格間距x

   PicHruler.Line (Xi, -0.95)-(Xi, 0.001), gl副格線色

     

Next i

For i = 1 To Nsecx * 4 + 1  '主格線

   Xi = 0 + (i - 1) * gl主格間距x

   PicHruler.Line (Xi, -0.95)-(Xi, 0.02), gl主格線色

   PicHruler.PSet (Xi, 0.75), PicHruler.BackColor

   PicHruler.Print Xi

Next i

For i = 1 To Nsecx * 4 + 1   '主格線

   Xi = 0 - (i - 1) * gl主格間距x

   PicHruler.Line (Xi, -0.95)-(Xi, 0.02), gl主格線色

   PicHruler.PSet (Xi, 0.75), PicHruler.BackColor

      PicHruler.Print Xi

Next i

 

Case True

For i = 1 To Nsecx * 4 + 1  '主格線

   Xi = 0 + (i - 1) * gl副格間距x * 0.5 * pi

   PicHruler.Line (Xi, -0.95)-(Xi, 0.001), gl副格線色

   

Next i

For i = 1 To Nsecx * 4 + 1   '副格線

   Xi = 0 - (i - 1) * gl副格間距x * 0.5 * pi

   PicHruler.Line (Xi, -0.95)-(Xi, 0.001), gl副格線色

     

Next i

For i = 1 To Nsecx * 4 + 1  '主格線

   Xi = 0 + (i - 1) * gl主格間距x * pi / 2

   PicHruler.Line (Xi, -0.95)-(Xi, 0.02), gl主格線色

   PicHruler.PSet (Xi, 0.75), PicHruler.BackColor

    PicHruler.Print Round(Xi / pi, 3) & "π"

Next i

For i = 1 To Nsecx * 4 + 1   '主格線

   Xi = 0 - (i - 1) * gl主格間距x * pi / 2

   PicHruler.Line (Xi, -0.95)-(Xi, 0.02), gl主格線色

   PicHruler.PSet (Xi, 0.75), PicHruler.BackColor

      PicHruler.Print Round(Xi / pi, 3) & "π"

Next i

End Select

End Sub

 

Private Sub 垂直尺()

.

.

.

.

End Sub

Private Sub Combo1_Click()

 

Select Case Combo1.Text

Case "極座標類"

 

List1.Clear

List1.AddItem "r(t)=1.5"

List1.AddItem "r(t)=5*cos(2t)"

List1.AddItem "r(t)=5/cos(t)"

List1.AddItem "r(t)=5/sin(t)"

.

.

.

List1.AddItem "r(t)=13/(4*cos(t)+6*sin(t))"

List1.AddItem "r(t)=2.5*(exp(cos(t))-2*cos(4*t)+sin(t/4)^3)"

List1.AddItem "r(t)=((2 * Cos(t) + 4 * Sin(t))+sqr((2 * Cos(t) + 4 * Sin(t))^2-4))/2"

List1.AddItem "r(t)=2*((2 * Cos(t) + 4 * Sin(t))-sqr((2 * Cos(t) + 4 * Sin(t))^2-4))/2"

CmdPolar.Enabled = True

CmdParameter.Enabled = False

Case "參數類"

 

List1.Clear

List1.AddItem "x=t,y=sin(t)"

List1.AddItem "x=t,y=cos(t)"

List1.AddItem "x=t,y=tan(t)"

.

.

.

List1.AddItem "x=2+2*cosd(30)*cos(t)-3*sind(30)*sin(t),y=2+2*sind(30)*cos(t)+3*cosd(30)*sin(t)"

List1.AddItem "x=(2+cos(2.5*t))*cos(t),y=(2+cos(2.5*t))*sin(t)"

List1.AddItem "x=2+2*cosd(30)/cos(t)-3*sind(30)*tan(t),y=2-2*sind(30)*tan(t)+3*cosd(30)/cos(t)"

.

.

.

CmdParameter.Enabled = True

CmdPolar.Enabled = False

End Select

End Sub

 

下兩圖為利用作者所設計之函數繪圖程式所繪製之成果畫面。

 

 

 

Name(您的大名)
E_MAIL(您的電子信箱)
Comment or Suggestion(您想反應的狀況,建議,或諮詢事項)
首頁