gpt4 book ai didi

vb.net - Visual Basic - 制作折线图

转载 作者:行者123 更新时间:2023-12-02 04:22:43 24 4
gpt4 key购买 nike

这是我在 stackoverflow 上发表的第一篇文章,对于我可能搞砸的任何事情,提前表示歉意,但对于一个项目,我正在做一个弹丸运动模拟器。我只是一个初级程序员,对图表没有太多经验,但我觉得没有任何有用的 YouTube 视频。

该图表绘制的是垂直位移与水平位移的关系,看起来应该像一条倒抛物线,但它看起来一点也不像它应该的样子。

我正在努力正确设置轴间隔,每次线应该从原点开始但 x 轴包含位移的负值,这绝对不应该发生。每次进行不同的模拟时,轴都应该改变,以便 x 轴上的每个间隔都沿着射弹总射程的十分之一。

任何能为我指明正确方向的东西都将非常有用。

Screenshot of chart on runtime

代码:

 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

最佳答案

如果您想明确设置 X 轴的最小值,您可以使用 Axis.Minimum .在您的情况下,您会将其用作 Chart1.ChartAreas("Default").AxisX.Minimum = SomeValue请注意,当您以这种方式设置最小值时,轴将停止自动重新缩放。

如果您希望当所有 x 值为正时最小值始终为零,请查看 Axis.IsStartedFromZero

我希望我能正确理解你的问题,因为你提到了间隔,但似乎在谈论你的 x 轴的最小值。

作为对与问题无关的代码的进一步评论;每次要更新图形时都删除 ChartArea 是不必要且效率低下的,Series 也是如此。这样做将导致必须在每次更新时重新格式化图表(就像您实际上正在处理该系列一样)。

调用 YourSeries.Points.Clear() 然后添加新点就足够了。这样您就不必在每次更新时重新指定系列颜色和字符类型。

编辑:

我还看到您将 x 位置四舍五入到小数点后一位,大概是为了防止 x 轴上有长而难看的数字。但是,更好的方法是指定一个 format对于轴:

chart1.ChartAreas.FirstOrDefault.AxisX.LabelStyle.Format = "{0:0.0}" 在您的案例中。这样您的系列仍将存储准确的值,但只会显示一位小数。

关于vb.net - Visual Basic - 制作折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58415028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com