在窗体上放置一个名为 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)