如何用VB画出二次函数图像和波长图像

如何用VB画出二次函数图像和波长图像,第1张

在窗体上放置一个名为 PicDraw 的框,两个按钮,分别命名为 CmdDrawQuad 与 CmdDrawWave,全部代码如下[Visual Basic 60]:

Option Explicit

'声明平面直角坐标系的左上角、右下角的坐标

Const sngCrdL_X As Single = -50

Const sngCrdL_Y As Single = 100

Const sngCrdR_X As Single = 100

Const sngCrdR_Y As Single = -50

'声明二次函数的解析式(Y = AX^2 + BX + C)

Const sngA As Single = 1 / 5

Const sngB As Single = 0

Const sngC As Single = 10

'================================

'计算 PI

'================================

Property Get PI() As Single

PI = Atn(1) 4

End Property

'================================

'计算一次/二次函数

'================================

Function CalculateFunction(X As Single, Optional A As Single, Optional B As Single, Optional C As Single) As Single

CalculateFunction = A X ^ 2 + B X + C

End Function

'================================

'计算波

'Swin

振幅

'PeriodsDistance

每一个周期的长度

'================================

Function CalculateWave(X As Single, Swin As Single, PeriodsDistance As Single) As Single

CalculateWave = Sin(X / PeriodsDistance PI 2) Swin

End Function

'================================

'准备平面直角坐标系

'================================

Sub Prepare()

Dim X As Long, Y As Long

PicDrawCls

'清空框

PicDrawScale (sngCrdL_X, sngCrdL_Y)-(sngCrdR_X, sngCrdR_Y)

'设置坐标

PicDrawLine (sngCrdL_X, 0)-(sngCrdR_X, 0), vbBlue

'绘制 X 轴

PicDrawLine (0, sngCrdL_Y)-(0, sngCrdR_Y), vbBlue

'绘制 Y 轴

For X = sngCrdL_X To sngCrdR_X

For Y = sngCrdR_Y To sngCrdL_Y

PicDrawPSet (X, Y), vbCyan

'绘制网格

Next Y

Next X

End Sub

Private Sub CmdDrawQuad_Click()

Prepare

Dim sngX As Single, sngY As Single

Dim LastX As Single, LastY As Single

Dim bDrawing As Boolean

For sngX = sngCrdL_X To sngCrdR_X Step 05

LastY = sngY

sngY = CalculateFunction(sngX, sngA, sngB, sngC)

'计算与X坐标所对应的Y坐标

If bDrawing Then

PicDrawLine (LastX, LastY)-(sngX, sngY)

'绘制线段

End If

LastX = sngX

bDrawing = True

Next sngX

End Sub

Private Sub CmdDrawWave_Click()

Prepare

Dim sngX As Single, sngY As Single

Dim LastX As Single, LastY As Single

Dim bDrawing As Boolean

For sngX = sngCrdL_X To sngCrdR_X Step 05

LastY = sngY

sngY = CalculateWave(sngX, 50, 50)

'计算与X坐标所对应的Y坐标

If bDrawing Then

PicDrawLine (LastX, LastY)-(sngX, sngY)

'绘制线段

End If

LastX = sngX

bDrawing = True

Next sngX

End Sub

声明一点,由于知识水平原因,CalculateWave函数是我自己摸索出来的,如果有问题,请告知,谢谢!

就是使用描点法进行绘图。。因为反比例函数是中心对称图形,因此可以选几个点同时完成两只双曲线的绘制。。如选取(1,4)对应(-1,-4);(2,2)对应(-2,-2)。。。给你一个图,虚线连接两个关于原点成中心对称的点。。。如果还有什么疑问,可以追问。

没有直接画出任意函数的方法,只有通过画点,画线等方法画出函数图形。

画图要最小化后不改变就要把AutoRedraw设成True

保存画出来的要保存Image,而不是Picture

1画点

Picture1PSet (坐标), RGB(颜色)

Picture1PSet (3000, 1000), RGB(255, 0, 0)

2画线

Picture1Line (坐标1)-(坐标2), 颜色

Picture1Line (0, 0)-(500, 500), RGB(0, 0, 0)

3画圆

Picture1Circle (圆心坐标), 半径, 颜色

Picture1Circle (400, 400), 400, RGB(0, 0, 0)

如果要画个填充的圆,可以把FillStyle属性设为0填充颜色为FillColor属性如果没有设置FillColor属性,则默认为线条的颜色

4画矩形

Picture1Line (坐标1)-(坐标2),颜色,B/BF'BF是实心,B是空心

Picture1Line (0, 0)-(500, 500), RGB(255, 0, 0), B

5画圆弧

Picture1circle (x,y),半径,[color],start,end

如Start和end为正的弧度数,画出一段圆弧;如为负数,则画出一段扇形。

6画椭圆

Objectcircle (x ,y),半径[,color],[start],[end],aspect

Aspect:纵横比。表示垂直长度和水平长度比。

Aspext<1时,radius表示的是水平方向的x 半径。

Aspect>=1时,radius表示的是垂直方向的y 半径。

7自定义坐标

Picture1Scale (始坐标)-(末坐标)

分思路和代码两步说:

思路[就是伪代码]:读取数据[不知道你的数据来源和方式]--画点连线[坐标点,点色,大小;折线,线色,粗细]

代码:不知道数据来源、多少组数据、数据大小范围、不知道是静态的还是动态的图表?无法写代码。

能不能把“不确定表达式的多个函数”给你看下。

张志晨:您的问题==我的课题愿携手共进

private

sub

command1_click()

'确定按钮单击事件

dim

x,

y

as

single

'定义x,y两个变量

picture1scale

(-10,

25)-(10,

-25)

'定义坐标系

picture1line

(-10,

0)-(10,

0),

rgb(0,

0,

255)

'画横坐标轴,颜色为蓝色

picture1line

(0,

25)-(0,

-25),

rgb(0,

0,

255)

'画纵坐标轴,颜色为蓝色

'用循环语句描点画函数图像

for

x

=

-10

to

10

step

00001

'x值从-10变化到10,每次增量为00001

y

=

x

^

2

'根据表达式y=x2来计算y值

picture1pset

(x,

y),

rgb(255,

0,

0)

'根据x,y的值用红色描点

next

x

'取下一个增量后的x值

end

sub

'结束程序

这个编码应该可以

Private Sub Command1_Click()

Dim a%, b%, c%, i%

a = InputBox("a")

b = InputBox("b")

c = InputBox("c")

For i = -25 To 25

Picture1Line (i, a i ^ 2 + b i + c)-(i + 1, a (i + 1) ^ 2 + b (i + 1) + c)

Next

End Sub

Private Sub Form_Load()

Picture1AutoRedraw = True

Picture1Scale (-25, 100)-(25, -100)

Picture1Line (-25, 0)-(25, 0), 2

Picture1Line (0, -100)-(0, 100), 2

End Sub

答案补充:Cot函数这样修改即可。主要是你没有定义y的类型。至于fipi/180与fi有什么区别,那要根据你的fi单位而定。如果你是以角度输入的,那么应该加上*pi/180,如果本身是以弧度输入的,就直接写fi即可。

====================

Private

Sub

Command1_Click()

Dim

x

As

Single,

y

As

Single

Picture1Scale

(-15,

15)-(15,

-15)

For

x

=

-15

To

15

Step

0001

w

=

1

y

=

1

/

(Tan(w

x))

Picture1PSet

(x,

y),

RGB(0,

255,

0)

Next

x

End

Sub

===================

建一个Command1,Picture1,Combo1使用的时候,请先在Combo1中选择或者输入tan,然后单击按钮。

代码如下。

=================

Const

pi

=

314159265

Private

Sub

Command1_Click()

Dim

x

As

Single,

y

As

Single,

w

As

Single,

fi

As

Single

If

Combo1Text

=

"tan"

Then

w

=

1

fi

=

0

Picture1Scale

(-15,

15)-(15,

-15)

For

x

=

-15

To

15

Step

0001

y

=

Tan(w

x

+

fi)

Picture1PSet

(x,

y),

RGB(0,

255,

0)

Next

x

End

If

End

Sub

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12185886.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存