首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

vb,绘制分段函数图象分段出不连接,该怎么解决

2012-01-11 
vb,绘制分段函数图象分段出不连接代码如下Private Sub 坐标系3(轴长, 最大值, 弯矩最大处)Pic2.Scale (-轴

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

热点排行