因此,我一直在为学校设计一个项目,其中一部分必须计算弹丸运动的坐标,然后将其添加到一系列点图上并绘制在应用程序上。唯一的问题是,如果速度太高(这将增加飞行和范围飞行的总时间,导致一组更大的坐标),则应用程序冻结-但不会崩溃。它没有显示任何错误,通常与我使用Visual Studio 2013时一样。
我将为此过程附上代码,任何人都可以发现它为什么冻结和/或如何修复它?
我只是一个初学者,所以对编程知识不多,任何帮助的知识都将不胜感激。
Dim xPos As Double = findXLocation(velocity, angle, x)
Dim yPos As Double = findYLocation(velocity, angle, x, elevation, totalTime, heightOfProjectile, flightRange)
Chart1.Series("Projection").Points.AddXY(xPos, yPos)
Dim label As New CalloutAnnotation
With label
Chart1.Annotations.Add(label)
End With
Next
我发现加快计算速度的一种方法是将步长(最初为0.01)减小到更高的水平,这意味着将执行较少的计算。但这将导致大量的If语句,因为case语句还会导致这些点的计算冻结。我还尝试设置一个变量,称为“增量”,将其设置为步长值。可以用很多不同的方法来计算-我最初尝试过increment = totalTime / 1000
,但这再次导致了应用程序完全冻结,尽管将输入什么速度。
findYLocation和findXLocation也可能有用,并在下面附加。
Public Function findYLocation(ByVal velocity As Double, ByVal angle As Double, ByVal time As Double, ByVal elevation As Double, ByVal totalTime As Double, ByVal heightOfProjectile As Double, ByVal flightRange As Double) As Double
Dim y As Double
y = -(0.5 * gConstant * sq(time)) + (findVerticalVelocity(velocity, angle) * time) + elevation
' y = Math.Round(y, 1)
If y < 0 Then
y = 0
End If
Return y
End Function ```
Public Function findXLocation(ByVal velocity As Double, ByVal angle As Double, ByVal time As Double) As Double
Dim x As Double
x = findHorizontalVelocity(velocity, angle) * time
' x = Math.Round(x, 1)
If x < 0 Then
x = 0
End If
Return x
End Function