我有一個小物理玩具應用程序,我正在開發。它工作得很好,除了粒子不會互相推開,只是朝着,我調試了這個子命令通過它的命令,並且意識到值'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
「一旦重新計算'H'值,即使x1,y1,x2,y2都不相同,也就意味着H應該是不同的。 - 你能舉出一個具體的例子,用數字說明你得到了一個你沒有想到的'h'的位置嗎?此外,「高速」/「速度」的類型和幅度有多大 - 這可能只是四捨五入? – 2011-02-03 09:32:39