我正在开发一个小型物理玩具应用程序。它工作正常,除了粒子不会相互推开,只会拉向,我逐个命令调试了 sub 通过它的命令,并意识到值“H”不会改变,在第一次通过时设置为什么sub 是它保留的内容,更改此值的唯一方法是手动设置它,即'h = 1'。一旦对“H”值重做计算,它就会重置为之前的值,即使 x1,y1,x2,y2 都不同,因此意味着 H 应该不同。
我认为是我在某个地方犯了数学错误,但我看不出它在哪里。我需要一双崭新的眼睛来审视我的工作。如果你发现任何东西,请告诉我。
谢谢。
Public Sub movenodes()
For i As Integer = 0 To connectionnumber
If connections(i).exists = True Then
Dim n1x As Integer
Dim n2x As Integer
Dim n1y As Integer
Dim n2y As Integer
Dim h As Integer
n1x = nodes(connections(i).node1).x
n2x = nodes(connections(i).node2).x
n1y = nodes(connections(i).node1).y
n2y = nodes(connections(i).node2).y
h = 1
h = Math.Sqrt(((nodes(connections(i).node1).x + nodes(connections(i).node2).x) ^ 2) + ((nodes(connections(i).node1).y + nodes(connections(i).node2).y) ^ 2))
Me.Text = nodes(connections(i).node1).x & " " & nodes(connections(i).node1).y & " " & h
If h > connections(i).happy Then
If n1x > n2x Then
nodes(connections(i).node1).hspeed -= 0.1
nodes(connections(i).node2).hspeed += 0.1
ElseIf n1x < n2x Then
nodes(connections(i).node1).hspeed += 0.1
nodes(connections(i).node2).hspeed -= 0.1
End If
If n1y > n2y Then
nodes(connections(i).node1).vspeed -= 0.1
nodes(connections(i).node2).vspeed += 0.1
ElseIf n1y < n2y Then
nodes(connections(i).node1).vspeed += 0.1
nodes(connections(i).node2).vspeed -= 0.1
End If
ElseIf h < connections(i).happy Then
MsgBox("")
If n1x > n2x Then
nodes(connections(i).node1).hspeed += 0.5
nodes(connections(i).node2).hspeed -= 0.5
ElseIf n1x < n2x Then
nodes(connections(i).node1).hspeed -= 0.5
nodes(connections(i).node2).hspeed += 0.5
End If
If n1y > n2y Then
nodes(connections(i).node1).vspeed += 0.5
nodes(connections(i).node2).vspeed -= 0.5
ElseIf n1y < n2y Then
nodes(connections(i).node1).vspeed -= 0.5
nodes(connections(i).node2).vspeed += 0.5
End If
End If
End If
Next
End Sub