Это мой первый пост о stackoverflow, поэтому извините заранее за все, что я, возможно, испортил, но для проекта я делаю симулятор для движения снаряда. Я только начинающий программист, и у меня нет большого опыта работы с диаграммами, но я не считаю полезными видео на YouTube.
Диаграмма отображает вертикальное смещение относительно горизонтального смещения и должна выглядеть как перевернутая парабола. но это не похоже на то, что должно.
Я пытаюсь правильно установить интервалы между осями, каждый раз, когда линия должна начинаться с начала координат, но ось x содержит отрицательные значения для смещения, что должно определенноне должно происходить. Каждый раз, когда выполняется другое моделирование, ось должна меняться так, чтобы каждый интервал по оси x был чем-то вдоль линий десятой части общего диапазона снаряда.
Все, что могло бы направить меня в правильном направлениибыло бы невероятно полезно.
![Screenshot of chart on runtime](https://i.stack.imgur.com/xLzcg.png)
Код:
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 code:
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