Ein bisschen Mathe – Bewegungen auf der Kreisbahn

kreisbahnNeulich in der Vorlesung: Jan, Thomas und meine Wenigkeit saßen in der Pause zusammen und haben darüber nachgedacht wie man sich mathematisch auf einer Kreisbahn entlangbewegen kann. Uns war klar, dass man nicht um den Einsatz von Sinus und Cosinus herumkommt, wie es jedoch genau ging wollte uns partout nicht einfallen.
Natürlich hätten wir im Internet nachsehen können welches sicherlich die richtige Lösung parat gehabt hatte, aber wenn einen erstmal der Ergeiz gepackt hat, dann möchte man das ganze auch selber hinbekommen 😉 Nach einigen Tagen Pause habe ich das Problem heute wieder aufgegriffen und auf dem Rad ist mir die Lösung eingefallen.

Position.x = cos(Alpha) * Radius;
Position.y = sin(Alpha) * Radius;

Das alleine ist schon des Rätsels Lösung. Man muss nur beachten, dass der Mittelpunkt des Kreises direkt auf dem Nullpunkt liegen muss.

Wer das ganze als Funktion für das Gamestudio haben möchte sollte hiermit glücklich werden. Mit den Pfeiltasten kann man die Camera links- und rechtsrum um den Punkt (0,0,0) drehen.

VECTOR* temp_vec;
var cam_angle = 0;

function move_camera() {
temp_vec = vector(0,0,0);
while(1) {
if (key_cul) {
cam_angle +=1;
camera.x = cos(cam_angle) * 768;
camera.y = sin(cam_angle) * 768;
vec_diff(temp_vec.x,vector(0,0,0),camera.x);
vec_to_angle(camera.pan,temp_vec);
wait(1);
}
if (key_cur) {
cam_angle -=1;
camera.x = cos(cam_angle) * 768;
camera.y = sin(cam_angle) * 768;
vec_diff(temp_vec.x,vector(0,0,0),camera.x);
vec_to_angle(camera.pan,temp_vec);
wait(1);
}
wait(1);
}
}

P.S. Merkt euch mal so ein Zeug wenn ihr auf dem Fahrrad sitzt und keinen Stift dabeihabt 😉

6 thoughts on “Ein bisschen Mathe – Bewegungen auf der Kreisbahn”

  1. Ãœber die Formel bin ich auch schonmal in David Scherfgens Buch “Spieleentwicklung mit C++ und DirectX” gestolpert und hatte gehofft, dass die für den Fall funzt. Aber:

    camera.x = camera.x * cos(cam_angle) + camera.y * sin(cam_angle);
    camera.y = -camera.x * sin(cam_angle) + camera.y * cos(cam_angle);

    …hat es in dem Fall nicht rausgehauen!

  2. Ist ja auch kein Wunder: der Winkel ist bei den Gleichungen ein Delta und nicht der Absolutwert. Das ist ja gerade der Vorteil: man kann einen beliebigen Punkt um jeden anderen beliebigen Punkt drehen, ohne vorher die absolute Lage bestimmen zu müssen.

  3. Erstens: Ich rechne in absoluten Winkeln, zweitens: Das sollte auch kein Problem bereiten! Is ja egal welchen Winkel ich nehmen, das verhalten ist auf jedenfall NICHT normal 😉 Kannst ja gleich mal nach hinten gucken kommen 😉

  4. Jetzt weiß ich, warum ich mit den Uhrzeiten nicht zurecht komme! Stell man deine Serverzeit oder konfigurier alternativ in deinem WP, dass wir Sommerzeit haben… 😉

  5. selbst ohne die Code-Zeilen kann jeder leicht erkennen was ihr studiert …
    obwohl … könnte auch physik sein (was es nicht besser macht ^^)

Leave a Reply to Padmalcom Cancel reply

Your email address will not be published. Required fields are marked *