vb,绘制分段函数图象分段出不连接
代码如下Private Sub 坐标系3(轴长, 最大值, 弯矩最大处)
Pic2.Scale (-轴长 / 5, 最大值 * 2)-(轴长 * 1.4, -(最大值 * 2))
Pic2.Line (0, -(最大值 * 1.5))-(0, 最大值 * 1.5)
Pic2.Line -(-轴长 / 100, 最大值 * 1.3), vbBlue
Pic2.Line (轴长 / 100, 最大值 * 1.3)-(0, 最大值 * 1.5), vbBlue
Pic2.Line (0, 0)-(轴长 * 1.25, 0)
Pic2.Line -(轴长 * 1.22, 最大值 / 16), vbBlue
Pic2.Line (轴长 * 1.22, -最大值 / 16)-(轴长 * 1.25, 0), vbBlue
Pic2.CurrentX = -轴长 / 100
Pic2.CurrentY = 0
Pic2.Print 0
Pic2.CurrentX = 轴长
Pic2.CurrentY = 0
Pic2.Print 轴长
Pic2.CurrentX = 弯矩最大处
Pic2.CurrentY = 0
Pic2.Print 弯矩最大处
Pic2.CurrentX = 轴长 * 1.25
Pic2.CurrentY = 0
Pic2.Print "X"
Pic2.CurrentX = 轴长 / 50
Pic2.CurrentY = 最大值 * 1.5
Pic2.Print "Y"
Pic2.CurrentX = 弯矩最大处 * 0.99
Pic2.CurrentY = 最大值 * 1.32
Pic2.Print Round(最大值)
End Sub
Private Sub 坐标系4(轴长, 最小值, 弯矩最小处)
Pic2.Scale (-轴长 / 5, Abs(最小值) * 2)-(轴长 * 1.4, -(Abs(最小值) * 2))
Pic2.Line (0, -(Abs(最小值) * 1.5))-(0, Abs(最小值) * 1.5)
Pic2.Line -(-轴长 / 100, Abs(最小值) * 1.3), vbBlue
Pic2.Line (轴长 / 100, Abs(最小值) * 1.3)-(0, Abs(最小值) * 1.5), vbBlue
Pic2.Line (0, 0)-(轴长 * 1.25, 0)
Pic2.Line -(轴长 * 1.22, Abs(最小值) / 16), vbBlue
Pic2.Line (轴长 * 1.22, Abs(最小值) / 16)-(轴长 * 1.25, 0), vbBlue
Pic2.CurrentX = -轴长 / 100
Pic2.CurrentY = 0
Pic2.Print 0
Pic2.CurrentX = 轴长
Pic2.CurrentY = 0
Pic2.Print 轴长
Pic2.CurrentX = 弯矩最小处
Pic2.CurrentY = 0
Pic2.Print 弯矩最小处
Pic2.CurrentX = 轴长 * 1.25
Pic2.CurrentY = 0
Pic2.Print "X"
Pic2.CurrentX = 轴长 / 50
Pic2.CurrentY = 最小值 * 1.5
Pic2.Print "Y"
Pic2.CurrentX = 弯矩最小处 * 0.99
Pic2.CurrentY = 最小值 * 1.32
Pic2.Print Round(最小值)
End Sub
Private Sub Command1_Click()
Pic2.Cls
Dim y()
l = Val(Text1.Text)
l1 = Val(Text2.Text)
p1 = Val(Text3.Text)
xp1 = Val(Text4.Text)
ReDim y(l * 1000)
Max = 0
Maxx = 0
Min = 0
Minx1 = 0
For i = 0 To l * 1000
x = i / 1000
Select Case x
Case Is <= xp1
y(i) = 0
Case Is <= l1
y(i) = -p1
Case Else
y(i) = p1 * (l1 - xp1) / (l - l1)
End Select
If y(i) > Max Then
Max = y(i)
Maxx = x
ElseIf y(i) < Min Then
Min = y(i)
Minx1 = x
End If
Next i
If Abs(Max) > Abs(Min) Then
坐标系3 l, Max, Maxx
Else
坐标系4 l, Min, Minx1
End If
For i = 0 To l * 1000
x = i / 1000
Pic2.PSet (x, y(i))
If i Mod (50 * l) = 0 Then
Pic2.Line (x, y(i))-(x, 0), vbBlue
End If
Next i
End Sub
[解决办法]
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function Polyline Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
Private Sub Form_Paint()
Dim p(5) As POINTAPI 'p(i)用于表达点(p(i).x,p(i).y ,定义n+1的点对象
'曲线是由点的连线组成,你将组成曲线的点的坐标值,按照顺序填入p(i)中,
p(0).X = 10 '设置点x位置
p(0).Y = 10 '设置点y位置
p(1).X = 40
p(1).Y = 20
p(2).X = 60
p(2).Y = 30
p(3).X = 80
p(3).Y = 50
p(4).X = 100
p(4).Y = 20
p(5).X = 120
p(5).Y = 30
' polyline函数用于将这些点连成曲线
Polyline hdc, p(0), 6
End Sub