私のシミュレーションでは、惑星の色はランダムに選択されます。残されたトレイルは、その惑星と同じ色になっているはずです。これは唯一の惑星がある場合にはうまくいきますが、新しい惑星が追加されると、すべての惑星の軌跡は新しい惑星の軌跡と同じ色になります。 https://imgur.com/a/EVh5oVB.netの重力シミュレーション - 惑星の後ろに軌跡を残すことに問題がある
私はそれぞれの惑星がそれ自体が同じ色をしていることが理にかなっています。ここに私のコードの関連部分は以下のとおりです。
Public Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles picSpace.Paint
For Each sun In sunsList
e.Graphics.FillEllipse(Brushes.Yellow, CInt(sun.positionX - 10), CInt(sun.positionY - 30), 20, 20)
Next
For Each planet In planetsList
Dim planetFill As Brush = New SolidBrush(planet.colour)
Dim trailColour As Pen = New Pen(planet.colour)
e.Graphics.FillEllipse(planetFill, planet.displayX - 5, planet.displayY - 5, 10, 10)
For count As Integer = 0 To counter
e.Graphics.DrawEllipse(trailColour, trail(0, count), trail(1, count), 1, 1)
Next
Next
End Sub
Sub Position()
planet.displayX = Math.Round(planet.positionX)
planet.displayY = Math.Round(planet.positionY)
trail(0, counter) = planet.displayX
trail(1, counter) = planet.displayY
counter += 1
ReDim Preserve trail(1, counter)
End Sub
Private Sub space_Click(sender As Object, e As EventArgs) Handles picSpace.Click
If hsbSimulationSpeed.Value > 0 Then
Timer1.Enabled = True
End If
If chkAddPlanets.Checked = True Then
planet = New Body
numberOfPlanets += 1
planet.colour = GetRandomColour()
planet.positionX = MousePosition.X
planet.positionY = MousePosition.Y - 25
planet.velocityX = txtVelocityX.Text * 1000
planet.velocityY = txtVelocityY.Text * 1000
planetsList.Add(planet)
ElseIf chkAddSuns.Checked = True Then
sun = New Body
numberOfSuns += 1
sun.positionX = MousePosition.X
sun.positionY = MousePosition.Y
sun.mass = hsbSunMass.Value * 5 * (10^29)
sunsList.Add(sun)
End If
End Sub
Function GetRandomColour() As Color
Dim rand As New Random
Return Color.FromArgb(rand.Next(0, 256), rand.Next(0, 256), rand.Next(0,
256))
End Function
この問題を解決する簡単な方法はありますか、私は完全にトレイルが生成される方法を変更する必要がありますか?
forループが何をしているのかわかりません –