这是我在stackoverflow上的第一篇文章,所以提前对我可能搞砸的事情表示抱歉,但是为了一个项目,我正在做一个弹道模拟器。我只是一个初学者程序员,对图表没有太多经验,但我找不到任何有用的YouTube视频。
该图表绘制垂直位移与水平位移之间的关系,并且应该看起来像一个倒置的抛物线,但它看起来根本不像应该的样子。
我很难正确设置轴间隔,每次线条都应该从原点开始,但是x轴包含位移的负值,这绝对不应该发生。每次进行不同的模拟时,轴都应该更改,以便x轴中的每个间隔大约是弹丸总范围的十分之一。
任何可以指引我朝着正确方向前进的东西都会非常有用。
该图表绘制垂直位移与水平位移之间的关系,并且应该看起来像一个倒置的抛物线,但它看起来根本不像应该的样子。
我很难正确设置轴间隔,每次线条都应该从原点开始,但是x轴包含位移的负值,这绝对不应该发生。每次进行不同的模拟时,轴都应该更改,以便x轴中的每个间隔大约是弹丸总范围的十分之一。
任何可以指引我朝着正确方向前进的东西都会非常有用。
代码:
Public Sub CreateDiagram(ByVal flightRange As Double, ByVal totalTime As Double, ByVal velocity
As Double, ByVal angle As Double, ByVal elevation As Double, ByVal heightOfProjectile As Double)
Chart1.Titles.Add("Projectile Motion")
Chart1.ChartAreas.Clear()
Chart1.ChartAreas.Add("Default")
Dim xAxisInterval As Integer = CInt(totalTime / 10)
Dim yAxisInterval As Integer = CInt(heightOfProjectile / 10)
With Chart1.ChartAreas("Default")
.AxisX.Interval() = xAxisInterval
.AxisY.Interval() = yAxisInterval
End With
Chart1.Series.Add("projection")
Chart1.Series("projection").Color = Color.Black
Chart1.Series("projection").ChartType = DataVisualization.Charting.SeriesChartType.Line
For x = 0 To totalTime Step 0.1
Dim xPos As Double = findXLocation(velocity, angle, x)
Dim yPos As Double = findYLocation(velocity, angle, x, elevation)
Chart1.Series("projection").Points.AddXY(xPos, yPos)
Next
End Sub
编辑:findXLocation和findYLocation代码:
Public Function findYLocation(ByVal velocity As Double, ByVal angle As Double, ByVal time As Double, ByVal elevation As Double) As Double
Dim y As Double
y = elevation + findVerticalVelocity(velocity, angle) - ((0.5 * gConstant) * (time ^ 2))
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
findXLocation()
和findYLocation()
方法,调试起来会很困难。 - Mary