求教各位,如何在Vb里实现点的x,y坐标曲线运动?想了很久一直无法解决,根据曲线运动的公式演变了很多种计算方法都不成功。
解决方案 »
- mshflexgrid删除当前行所对应的数据库记录的问题
- 画图 做一个画三角函数的画板
- 马季去世的这个消息还没有在网上传出,正要在八宝山火化,我同学的父亲参加了追悼会,去了很多名人,过几天就网上和新闻都会有的,我再次
- VB能不能控件windows的资源管理器?
- 在excel中用宏实现邮件发送,怎么避免讨厌的警告?
- SQL中,新建一個表,該表要Copy另一表的某些列(不是全部)的所有數據,並在該表添加一些其它的列,值都為0
- 如何写一个根据单元格数值来设定该单元格字体颜色的宏?
- 下标越界
- 请那位同志过来小帮一下忙!
- 如何实现工具栏的停靠,就象vb,word中的工具栏一样?
- 如何将avi文件每次以byte大小读出写入到另一个avi中。
- 用Inet下载能不能不用缓存啊?
x As Single
y As Single
End Type
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim p(200) As POINTAPI
Private Sub Command1_Click()
Dim i As Long
For i = 0 To 200DoEvents
Sleep 10
p(i).x = i
p(i).y = 1 + Sin(i / 5)
Picture1.CurrentX = p(i).x
Picture1.CurrentY = p(i).y
If i > 0 Then Picture1.Line (p(i).x, p(i).y)-(p(i - 1).x, p(i - 1).y), vbRed
Next
End SubPrivate Sub Form_Load()
Picture1.Scale (0, 0)-(100, 2)
Picture1.AutoRedraw = True
End Sub
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
这个不是很懂,能否解释一下呢?呵。。我顺便也搞了个:没有楼上的思想好!
画个shape1控件 command1 代码如下:
————————————————————————————————
Private Sub Command1_Click()
Scale (-1000, 1000)-(4000, -1000)For x = -1000 To 3600 Step 0.01y = Sin(x / 180 * 3.1415926) * (0.25 * x)
PSet (x, y)Shape1.Left = x
Shape1.Top = y
NextEnd Sub
这是我实验的几个计算方法,可不正确,列出来希望大家指正
Vx = Abs(v0) * Cos(Abs(160)): Vy = Abs(v0) * Sin(Abs(160)) '设计加速度的夹角是160,v0是初速度,aSpeed是加速度。
Ax = Abs(aSpeed) * Cos(Abs(160)): Ay = Abs(aSpeed) * Cos(Abs(160))
Sx = (Vx * drAlpha) + 1 / 2 * (Ax * drAlpha ^ 2): Sy = drY + (Vy * drAlpha) + 1 / 2 * (Ay * drAlpha ^ 2)
rX = drX + (Sx * drAlpha) + 1 / 2 * (Sy * drAlpha ^ 2):rY = drY + (Sx * drAlpha) + 1 / 2 * (Sy * drAlpha ^ 2) 'drx,dry是飞机的启点坐标
Me.DrawWidth = 3
Me.PSet (Sx, Sy), RGB(2550, 2550, 0)
Me.DrawWidth = 1
这是我实验的几个计算方法,可不正确,列出来希望大家指正
Vx = Abs(v0) * Cos(Abs(160)): Vy = Abs(v0) * Sin(Abs(160)) '设计加速度的夹角是160,v0是初速度,aSpeed是加速度。
Ax = Abs(aSpeed) * Cos(Abs(160)): Ay = Abs(aSpeed) * Cos(Abs(160))
Sx = (Vx * drAlpha) + 1 / 2 * (Ax * drAlpha ^ 2): Sy = drY + (Vy * drAlpha) + 1 / 2 * (Ay * drAlpha ^ 2)
rX = drX + (Sx * drAlpha) + 1 / 2 * (Sy * drAlpha ^ 2):rY = drY + (Sx * drAlpha) + 1 / 2 * (Sy * drAlpha ^ 2) 'drx,dry是飞机的启点坐标
Me.DrawWidth = 3
Me.PSet (Sx, Sy), RGB(2550, 2550, 0)
Me.DrawWidth = 1
-----------------------------------------
没看出你的代码与时间的关系
Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 10
Me.DrawWidth = 3
Me.Scale (-10000, -10000)-(0, 0)
Me.AutoRedraw = True
Me.WindowState = 2
End Sub
Sub xxx(ByVal aspeed As Single)
v0 = 0
drAlpha = 45
drx = 0
dry = 0
Vx = Abs(v0) * Cos(Abs(160)): Vy = Abs(v0) * Sin(Abs(160)) '设计加速度的夹角是160,v0是初速度,aSpeed是加速度。
Ax = Abs(aspeed) * Cos(Abs(160)): Ay = Abs(aspeed) * Cos(Abs(160))
sx = (Vx * drAlpha) + 1 / 2 * (Ax * drAlpha ^ 2): sy = dry + (Vy * drAlpha) + 1 / 2 * (Ay * drAlpha ^ 2)
rX = drx + (sx * drAlpha) + 1 / 2 * (sy * drAlpha ^ 2): rY = dry + (sx * drAlpha) + 1 / 2 * (sy * drAlpha ^ 2) 'drx,dry是飞机的启点坐标 Me.PSet (sx, sy), RGB(2550, 2550, 0)
Me.DrawWidth = 2End SubPrivate Sub Timer1_Timer()
aspeed = aspeed + 0.2
xxx aspeed
End Sub
因为这个曲线要受到加速度的影响,产生有方向的曲线运动
Private Sub Form_Load()Me.AutoRedraw = True: Me.BackColor = 0
Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2
aTime = 0
v0 = 3
aSpeed = 1
aNGular = 120End Sub
Private Sub Timer1_Timer()
Static sAlpha As Single, Sx As Long, Sy As Long
Dim pY, pX As Double
aTime = aTime + 0.2DrawPoint Me.Width / 2, Me.Height / 2, 100, aTimeEnd Sub
Private Sub DrawPoint(ByVal drX As Long, ByVal drY As Long, ByVal drRds As Integer, ByVal drAlpha As Single)
Vx = Abs(v0) * Cos(Abs(160)): Vy = Abs(v0) * Sin(Abs(160)) '设计加速度的夹角是160,v0是初速度,aSpeed是加速度。
Ax = Abs(aSpeed) * Cos(Abs(160)): Ay = Abs(aSpeed) * Cos(Abs(160))
Sx = (Vx * drAlpha) + 1 / 2 * (Ax * drAlpha ^ 2): Sy = drY + (Vy * drAlpha) + 1 / 2 * (Ay * drAlpha ^ 2)
rX = drX + (Sx * drAlpha) + 1 / 2 * (Sy * drAlpha ^ 2):rY = drY + (Sx * drAlpha) + 1 / 2 * (Sy * drAlpha ^ 2) 'drx,dry是飞机的启点坐标而rx,ry这个公式是直线加速度运行的计算公式
Me.DrawWidth = 3
Me.PSet (Sx, Sy), RGB(2550, 2550, 0)
Me.DrawWidth = 1End Sub
Vy=|V|*sin@ ay=|a|*sin@
Sx=Vxt+1/2axt2
Sy=Vyt+1/2ayt2
注:|v|代表取V初速度的绝对值、@是初速度和加速度的夹角、t2代表时间t的平方。
sy/sx=(Vyt+1/2ayt2 )/(Vxt+1/2axt2)=(|V|*sin@t+1/2*k*|v|sin@t2 )/(|V|*cos@t+1/2*k*|v|cos@t2 )=tg@当然是直线了