0

我正在开发一个小型物理玩具应用程序。它工作正常,除了粒子不会相互推开,只会拉向,我逐个命令调试了 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
4

1 回答 1

2

心理调试告诉我你有Option Strict Off. Option Strict On会敦促您在使用 VB.NET 时始终拥有. 如果你有,你会得到OffOption Strict On

错误 BC30512:Option Strict On 不允许从“Double”到“Integer”的隐式转换

Math.Sqrt在to的结果的分配上hh正如@Marc Gravell 所暗示的那样,这里存在巨大的舍入问题潜力,因为Integer.

于 2011-02-03T09:44:01.097 回答