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.
Vermenigvuldiging van genormaliseerde vectoren terug reken
Re: Vermenigvuldiging van genormaliseerde vectoren terug rek
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.
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.
Re: Vermenigvuldiging van genormaliseerde vectoren terug rek
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.
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.
Re: Vermenigvuldiging van genormaliseerde vectoren terug rek
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;
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;
Re: Vermenigvuldiging van genormaliseerde vectoren terug rek
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):
Misschien nog een andere naam verzinnen voor de functie.
Bedankt voor de hulp.
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
Bedankt voor de hulp.
Re: Vermenigvuldiging van genormaliseerde vectoren terug rek
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.
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.