Springen naar inhoud

Transformatie van coordinaten 2 assen


  • Log in om te kunnen reageren

#1

anthogno

    anthogno


  • 0 - 25 berichten
  • 9 berichten
  • Gebruiker

Geplaatst op 12 februari 2014 - 03:27

Ik ben bezig met het maken van een spel en geraak maar niet verder met mijn wiskunde.

Stel, er is een 2D spel met een cartesisch coördinatenstelsel (x,y)
Een ruimteschip bevindt zich in het punt (a,b) met een richtingsvector (dirX,dirY). De camera volgt alle rotaties en bewegingen van het ship.
Ergens op een map is er ook een object P met coordinaten (pX,pY)
Nu wil ik een minimap creeren waarbij de richtingsvector van het ship telkens naar boven gericht is.

Geplaatste afbeelding

Gegeven positie en kijkrichting van het schip, wil ik de coördinaten bepalen van het punt P, in de minimap view, waarbij (dirX,dirY) de nieuwe Y as is.
Moest de richting van het schip samenvallen met de globale Y as, kan ik de nieuwe positie P berekenen met (v,w) = (pX,pY) – (a,b)

Indien het schip begint te roteren, is er waarschijnlijk ergens een transformatievector die ik kan gebruiken op (v,w) om te compenseren voor de verandering
Ik veronderstel dat ik de hoek alpha kan berekenen tussen de globale assenstelsel en de assenstelsel gevormd door (dirX,dirY) met een inwendig product tussen (x=0,y=1) and (dirX,dirY) (automatisch door de software)
Ik weet ook dat bij twee assenstelsels Oxyz and Ox'y'z' , een verband bestaat:
x' = x*cos(alpha) + y*sin(alpha)
y' = -x*sin(alpha) + y*sin(alpha)

en hier loop ik vast. Hoe transformeer ik punt P van de globale assenstelsel naar de coordinaten volgens de kijkrichting van het schip

Veranderd door anthogno, 12 februari 2014 - 03:33


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 12 februari 2014 - 08:32

Bepaal eerst de vector van het schip naar P: P'(pX-a,pY-b).
P' kan je dan projecteren op (dirX,dirY) via het inwendig product. Het resultaat hiervan geeft je de y-coordinaat in je nieuwe assenstelsel.

Als je dan de vector kan vinden loodracht op (dirX,dirY) en je projecteert P' daarop, dan kan je ook de x-coordinaat bepalen.

#3

Flisk

    Flisk


  • >1k berichten
  • 1270 berichten
  • Moderator

Geplaatst op 12 februari 2014 - 09:11

Het gaat op Xenion zijn manier.

Ikzelf zou het anders doen met volgend algoritme, pas stap 2 en 3 toe op de positie van elk object in je minimap:

We beginnen op je eerste figuur.
1)Bereken de cosinus en de sinus van de hoek van je schip t.o.v. de verticale.
Dit kan je met behulp van deze uitdrukking. De sinus vind je uit de cosinus met behulp van de goniometrische grondformule. De vectoren die je nodig hebt zijn (dirx,diry) en een willekeurige vector evenwijdig met de y-as (bijvoorbeeld (0,1)).

2)Gebruik de rotatiematrix (die je al gegeven had). En roteer alles (dus ook het schip).
De pijl van je schip is dan naar boven gericht.

3)Trek van alles de nieuwe positie van het schip af. Je schip komt dan in het midden te staan.

Weet je hoe je die rotatiematrix gebruikt? Kijk daarvoor eens hier. Je kan je nieuwe x en y coördinaat dus vinden door die matrix rechts te vermenigvuldigen met je oude x en y coördinaat.

Opmerking: je kan ook eerst alles transleren en dan pas roteren, dit maakt niet veel uit. Translatie en rotatie behouden allebei onderlinge afstanden en onderlinge hoeken. Misschien zal dit net iets korter zijn, omdat je dan de nieuwe positie van je schip niet moet berekenen (schip staat dan al in de oorsprong van het nieuwe stelsel).

Veranderd door Flisk, 12 februari 2014 - 12:30

Je leest maar niet verder want je, je voelt het begin van wanhoop.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures