C++ Bewegungsrichtung programmieren

Vllt wird hier eine viel einfachere Idee gebraucht. Die Bewegung muss nicht auf der Matrix erfolgen, sondern kann auch ohne das "Gitter" (=Matrix) berechnet werden, z.B. einfach mit Double-Variablen.
Den Punkt auf der Matrix erhält man dann durch einfaches Runden zur nächsten Zelle des Gitters.

@alle anderen: Wie wär's wenn ihr nicht spoilered oder nur mit Begriffen um euch werft, sondern nur die Ideen aufschreibt und den TE selbst überlegen lasst. Das ganze klingt schwer nach Übungsaufgabe und sollte auch von ihm gelöst werden.
 
Hi,

danke für die Hilfe, aber habe meine eigene Implementierung.

Ich verstehe die tan-Funktion nicht so recht

init.antX
init.antY
sind die neuen Positionen der Ameise in einem Schritt

init.resultX
init.resultY
sind die Änderungen / Steigung pro Schritt

Ist es so i.O.?
PHP:
init.antX[i] += tan(init.resultX[i]*3.1415/180);
init.antY[i] += tan(init.resultY[i]*3.1415/180);

Danke!
 
Ich hätte aber gerne die Tangens Funktion abgebildet und nicht irgend einen quatsch.
 
Wieso Quatsch? Die Geschwindigkeit als Vektor zu speichern, und so per Euler und iterativ (Pos_neu = Pos_alt + Geschwindigkeit* DT) zu integrieren ist mehr oder weniger der absolute Standard für das Problem.
 
Berechne aus zwei Punkten den Richtungsvektor. Du hast die Punkte a und b:
b-a berechnen, normalisieren und dann kannst du auf die Position der Ameise das Ergebnis addieren.
Das Ergebnis ist die Richtung von a nach b ! Winkel brauchst du nur für flüssige Drehungen.
Wenn du sie irgendwo hin umlenken willst, dann gibst als Punkt b einfach einen Punkt an wo sie hin soll und rechnest wie oben.

Schon läuft das Vieh in die korrekte Richtung. So kannst auch Kollisionen verhindern indem du die Positionen zweier Ameisen checkst und sie bei gewissem Abstand wo anders hinlaufen lassen, z.B. mit (-1) multiplizieren für die Gegenrichtung. Also: Position der Ameise merken und deren Richtungsvektor = Bewegung durch addieren. Beim ersten Schritt legst du einfach eine Richtung random fest und lässt die Werte sich dann gegenseitig beinflussen, z.B. bei Kollision, überschreiten der Fenster Koordinaten (muss dann immer zwischen x und x+i sein, alles andere würde außen liegen). Ich weiß dass es funktioniert, hatten es vor paar Jahren im Studium als Projekt :D

Die Geschwindigkeit regelst du über die Anzahl der Aufaddierungen pro Sekunde. Dafür solltest du wieder ein FPS-Lock einbauen, also die Methoden über einen Timer aufrufen oder sowas wie FrameSkip einbauen.

Und wer benutzt bitte Euler Winkel? Dafür wurden Quaterionen erfunden damit man nicht die komischen Drehungen drin hat (glaub hieß Gimbal Lock?). OpenGL nutzt jedenfalls Quaterionen wenn man ein Rotate angibt.

PS:
Bei kurvigen Bewegungen wirst du wohl nicht um Bezier Kurven herum kommen. Dann wäre Punkt a dein P1 und die Endposition P4. Mit P2 und P3 kannst du dann die Kurvigkeit bestimmen :D
 
Zuletzt bearbeitet:
Zurück
Oben