Vermenigvuldiging van genormaliseerde vectoren terug reken

Het forum voor overige vragen betreffende wiskunde uit het hoger onderwijs.
Plaats reactie
Tigris
Nieuw lid
Nieuw lid
Berichten: 11
Lid geworden op: 23 nov 2010, 22:20

Vermenigvuldiging van genormaliseerde vectoren terug reken

Bericht door Tigris » 23 nov 2010, 22:49

Hallo,

ForwardRightUp, Forward, Right en Up zijn vectoren.
Er zit altijd een hoek van 90 graden tussen Forward en Right-Right en Up-Up en Forward.
Forward, Right en Up zijn genormaliseerde vectoren.

Formule:
ForwardRightUp = (Forward*Var1)+(Right*Var2)+(Up*Var3)

Vraag:
Hoe reken ik Var1, Var2 en Var3 uit wanneer ForwardRightUp, Forward, Right en Up bekend zijn?

Eenvoudige afbeeldingen van de situatie:
http://i169.photobucket.com/albums/u208 ... /Cube1.jpg
http://i169.photobucket.com/albums/u208 ... /Cube2.jpg
http://i169.photobucket.com/albums/u208 ... /Cube3.jpg
http://i169.photobucket.com/albums/u208 ... /Cube4.jpg
http://i169.photobucket.com/albums/u208 ... /Cube5.jpg

Wit/Rood = Forward
Wit/Groen = Right
Wit/Blauw = Up

Lichtblauw/Rood = X as
Lichtblauw/Groen = Y as
Lichtblauw/Blauw = Z as

Groen = ForwardRightUp

In alle 5 afbeeldingen zijn Var1, Var2 en Var3 15 eenheden.

De dunne witte lijnen zijn van de kubus waarvan de achterste ribben niet zichtbaar zijn.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Vermenigvuldiging van genormaliseerde vectoren terug rek

Bericht door arie » 24 nov 2010, 02:23

Vertaal je vergelijking:
ForwardRightUp = (Forward*Var1)+(Right*Var2)+(Up*Var3)
naar een vectorvoorstelling:



Alle vectoren zijn gegeven, je wilt de waarden van v1, v2 en v3 weten.

Herschrijf nu:



ofwel:



En nu komt je vraag neer op het oplossen van het volgende stelsel vergelijkingen:



De extra voorwaarden die je gaf (F, R en U zijn genormaliseerde vectoren die onderling loodrecht op elkaar staan) zorgen ervoor dat er altijd een oplossing is.

Lukt het je om een stelsel van 3 vergelijkingen met 3 onbekenden (hier v1, v2 en v3) op te lossen?

Er zijn hiervoor verschillende methodes, zie bijv. http://en.wikipedia.org/wiki/System_of_linear_equations
onder de paragraaf "Solving a linear system" op die pagina.
Als je dit in een computerprogramma wilt gebruiken zou ik de regel van Cramer kiezen (Cramer's rule), om stelsels met de hand op te lossen werken de methode van 'eliminatie van variabelen' en het vegen (row reduction) heel goed.

Tigris
Nieuw lid
Nieuw lid
Berichten: 11
Lid geworden op: 23 nov 2010, 22:20

Re: Vermenigvuldiging van genormaliseerde vectoren terug rek

Bericht door Tigris » 24 nov 2010, 20:33

Ik wil het inderdaad voor een computerprogramma gebruiken.
Cramer’s rule: http://en.wikipedia.org/wiki/Cramer's_rule

Op deze pagina is het volgende te zien:



En:


Mijn formule in 2D:


Dan wordt x v1 en y v2:



e en f worden FRx en FRy:



Vervolgens a, b, c en d worden Fx, Fy, Rx en Ry:



Berekening om v1 te verkrijgen:


Als dit correct is dan ben ik een heel eind gekomen.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Vermenigvuldiging van genormaliseerde vectoren terug rek

Bericht door arie » 25 nov 2010, 02:32

Dit is correct.

De directe formule voor de berekening van de determinant van een 3x3 matrix vind je hier:
http://nl.wikipedia.org/wiki/Determinant

Voor de determinant



kan je bijvoorbeeld een functie schrijven in de vorm:

determinant33(a,b,c, d,e,f, g,h,i)
{
return(a*e*i + b*f*g + c*d*h - g*e*c - h*f*a - i*d*b);
}


Voor het stelsel uit jouw link (http://en.wikipedia.org/wiki/Cramer's_rule):



is deze functie dan weer aan te roepen met de juiste parameters:

noemer=determinant33(a,b,c, d,e,f, g,h,i);
x=determinant33(j,b,c, k,e,f, l,h,i)/noemer;
y=determinant33(a,j,c, d,k,f, g,l,i)/noemer;
z=determinant33(a,b,j, d,e,k, g,h,l)/noemer;

Tigris
Nieuw lid
Nieuw lid
Berichten: 11
Lid geworden op: 23 nov 2010, 22:20

Re: Vermenigvuldiging van genormaliseerde vectoren terug rek

Bericht door Tigris » 25 nov 2010, 16:01

De determinant blijkt altijd -1 te zijn dus dan hoeft alleen de teller berekent te worden.

De berekening is dan als volgt:







De functie wordt dan (taal is Lua):

Code: Selecteer alles

function UnitsOfFRU(FRU,Forward,Right,Up)
	return Vector(-(FRU.x*Right.y*Up.z+FRU.y*Right.z*Up.x+FRU.z*Right.x*Up.y-FRU.z*Right.y*Up.x-FRU.y*Right.x*Up.z-FRU.x*Right.z*Up.y),-(Forward.x*FRU.y*Up.z+Forward.y*FRU.z*Up.x+Forward.z*FRU.x*Up.y-Forward.z*FRU.y*Up.x-Forward.y*FRU.x*Up.z-Forward.x*FRU.z*Up.y),-(Forward.x*Right.y*FRU.z+Forward.y*Right.z*FRU.x+Forward.z*Right.x*FRU.y-Forward.z*Right.y*FRU.x-Forward.y*Right.x*FRU.z-Forward.x*Right.z*FRU.y))
end
Misschien nog een andere naam verzinnen voor de functie.

Bedankt voor de hulp.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Vermenigvuldiging van genormaliseerde vectoren terug rek

Bericht door arie » 25 nov 2010, 18:00

OK

Noot (wellicht ten overvloede):
Je kan je resultaten altijd testen door na afloop (als je Var1, Var2 en Var3 hebt gevonden)
(Forward*Var1) + (Right*Var2) + (Up*Var3)
te berekenen.
Hier moet dan weer ForwardRightUp uit komen.

Plaats reactie