diff --git a/main.go b/main.go index 1b51579..c98aee9 100644 --- a/main.go +++ b/main.go @@ -88,6 +88,10 @@ func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleLis var newParticleList [MAXPOINTS]rl.Vector2 var newParticleSpeed [MAXPOINTS]rl.Vector2 var particleFriction float32 = 0.85 + var particleLadung int = -1 + var masse float32 = 1 + var electrostaticRange float32 = 50 //range wiie weit die kraftwirkung ist + var electroStrength float32 = 500000 for j := float64(0); j < 50; { var startTime time.Time = time.Now() @@ -103,7 +107,7 @@ func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleLis wg.Add(1) go func(i int) { defer wg.Done() - + var electroForce rl.Vector2 // Jede Goroutine arbeitet nur auf Index i → kein Datenkonflikt for l := 0; l < particleCount; l++ { if l == i { @@ -123,6 +127,14 @@ func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleLis particleSpeed[i] = rl.Vector2Scale(rl.Vector2Reflect(particleSpeed[i], colNormal), particleFriction) } + if dist < electrostaticRange { + var tempForce rl.Vector2 = rl.Vector2Scale(diff, float32(particleLadung)*(electroStrength/(dist*dist))) + electroForce = rl.Vector2Add(electroForce, tempForce) + } + newParticleSpeed[i] = rl.Vector2Add( + particleSpeed[i], + rl.Vector2Scale(electroForce, float32(timeIncrement)/masse)) + } obstacleReflect(currentPositions[i], &particleSpeed[i], obstacles, particleRadius, obstacleCount) @@ -132,8 +144,8 @@ func physics(particleList *[MAXPOINTS]rl.Vector2, particleCount int, particleLis rl.Vector2Scale(particleSpeed[i], float32(timeIncrement))) newParticleSpeed[i] = rl.Vector2Add( - particleSpeed[i], - rl.Vector2Scale(gravity, float32(timeIncrement))) + rl.Vector2Add(particleSpeed[i], rl.Vector2Scale(gravity, float32(timeIncrement))), + rl.Vector2Scale(electroForce, float32(timeIncrement)/masse)) }(k) }