Transformatie van coordinaten 2 assen

Moderators: dirkwb, Xilvo

Reageer
Gebruikersavatar
Berichten: 9

Transformatie van coordinaten 2 assen

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.

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

Gebruikersavatar
Berichten: 2.609

Re: Transformatie van coordinaten 2 assen

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.

Gebruikersavatar
Berichten: 1.264

Re: Transformatie van coordinaten 2 assen

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).
Je leest maar niet verder want je, je voelt het begin van wanhoop.

Reageer