2011-02-03 35 views
0

我有一個小物理玩具應用程序,我正在開發。它工作得很好,除了粒子不會互相推開,只是朝着,我調試了這個子命令通過它的命令,並且意識到值'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 
+0

「一旦重新計算'H'值,即使x1,y1,x2,y2都不相同,也就意味着H應該是不同的。 - 你能舉出一個具體的例子,用數字說明你得到了一個你沒有想到的'h'的位置嗎?此外,「高速」/「速度」的類型和幅度有多大 - 這可能只是四捨五入? – 2011-02-03 09:32:39

回答

2

心理調試告訴我你有Option Strict Off。我會敦促你在使用VB.NET時始終擁有Option Strict On,除非你實際上需要Off的後期綁定功能。如果你有Option Strict On,你會得到

錯誤BC30512:選項嚴格On不允許從「雙師型」上的Math.Sqrth結果的那項任務「整型」

隱式轉換。正如@Marc Gravell所暗示的那樣,這裏有一個很大的可能性,因爲hInteger

+0

+1「使用VB.NET時始終打開Option Strict On」 – 2011-02-03 09:46:58