Springen naar inhoud

Vragen over matrices


  • Log in om te kunnen reageren

#1

nschagen

    nschagen


  • 0 - 25 berichten
  • 18 berichten
  • Gebruiker

Geplaatst op 12 januari 2007 - 15:55

Hoi wiskunde-experts :)

Ik ben bezig met het programmeren van een game-engine en matrices (transformaties) zijn daarbij van groot belang.

Ik gebruik 4x4 matrices voor mijn transformaties. Meer info:
Matrices in Direct3d

1. Is het zo dat de eerste 3 velden van de 3 bovenste rijen van een matrix de basisvectoren voor het nieuwe coordinatenstelsel vormen. b.v:

[Xbase.X,Xbase.Y,Xbase.Z,0]
[Xbase.X,Xbase.Y,Xbase.Z,0]
[Xbase.X,Xbase.Y,Xbase.Z,0]
[0 ,0 ,0 ,1]

2. Hoe kan ik de rotatie uit een matrix verwijderen??

Een manier die ik zelf bedacht heb:

Je haalt de translatie uit de matrix... voorbeeld:
[1 ,0 ,0 ,0]
[0 ,1 ,0 ,0]
[0 ,0 ,1 ,0]
[TransX,TransY,TransZ,1]

Vervolgens haal je de basisvectoren uit de matrix (zoals hierboven).
Bereken de lengte van elke basisvector en noem de lengtes (ScaleX,ScaleY,ScaleZ).
Vervolgens maak je een nieuwe matrix die er als volgd uit ziet.
[ScaleX,0 ,0 ,0]
[0 ,ScaleY,0 ,0]
[0 ,0 ,ScaleZ ,0]
[TransX,TransY,TransZ,1]

Is dit een goede aanpak..??? :)

Alvast bedankt :)

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

#2

stoker

    stoker


  • >1k berichten
  • 2746 berichten
  • Ervaren gebruiker

Geplaatst op 12 januari 2007 - 17:09

2. Hoe kan ik de rotatie uit een matrix verwijderen??

wat bedoel je daar precies mee?

#3

jhnbk

    jhnbk


  • >5k berichten
  • 6905 berichten
  • VIP

Geplaatst op 12 januari 2007 - 17:14

1. Is het zo dat de eerste 3 velden van de 3 bovenste rijen van een matrix de basisvectoren voor het nieuwe coordinatenstelsel vormen. b.v:

dat moeten al zeker de kolommen zijn als ik mij niet vergis (wiskundig gezien)
mss niet bij de directx library

#4

nschagen

    nschagen


  • 0 - 25 berichten
  • 18 berichten
  • Gebruiker

Geplaatst op 12 januari 2007 - 19:01

Oke... over hoe het zit met die basisvectoren, zal ik op een DirectX forum wel eens vragen. Mocht iemand het hier toevallig weten dan hoor ik het graag.

Met de rotatie verwijderen bedoel ik dat de matrix geen rotatie meer bevat, dus dat na de transformatie de assen niet gedraaid zijn, hooguit verplaatst of geschaalt. :)

#5

stoker

    stoker


  • >1k berichten
  • 2746 berichten
  • Ervaren gebruiker

Geplaatst op 12 januari 2007 - 21:35

Met de rotatie verwijderen bedoel ik dat de matrix geen rotatie meer bevat, dus dat na de transformatie de assen niet gedraaid zijn, hooguit verplaatst of geschaalt. :)

ik snap het nog altijd niet goed, maar het kan ook aan mij liggen.
ofwel wordt er geroteerd, door te vermenigvuldigen met een matrix, ofwel niet, en een poging; als je een geroteerde basis wil terug roteren, verminigvuldig je met de inverse van de rotatiematrix.

#6

Math-E-Mad-X

    Math-E-Mad-X


  • >1k berichten
  • 2382 berichten
  • Ervaren gebruiker

Geplaatst op 12 januari 2007 - 21:37

Met de rotatie verwijderen bedoel ik dat de matrix geen rotatie meer bevat, dus dat na de transformatie de assen niet gedraaid zijn, hooguit verplaatst of geschaalt. :)

Je bedoelt gewoon een diagonaalmatrix?
while(true){ Thread.sleep(60*1000/180); bang_bassdrum(); }

#7

nschagen

    nschagen


  • 0 - 25 berichten
  • 18 berichten
  • Gebruiker

Geplaatst op 12 januari 2007 - 22:51

ik snap het nog altijd niet goed, maar het kan ook aan mij liggen.
ofwel wordt er geroteerd, door te vermenigvuldigen met een matrix, ofwel niet, en een poging; als je een geroteerde basis wil terug roteren, verminigvuldig je met de inverse van de rotatiematrix.


Yep dat bedoel ik :)... Het probleem is dat ik geen losse matrix heb die ALLEEN de rotatie bevat. Ik heb dus een soort samengestelde matrix waar ik de rotatie uit wil hebben zodat alleen translatie en schaalgegevens o.i.d overblijven in de matrix.

Je hebt ook deze functie in Direct3d9:
D3DXMatrixDecompose
Deze word gebruikt om de translatie, rotatie en schaalgegevens uit een matrix te halen. Ik zou graag de translatie en schaalgegevens willen hebben en hier een nieuwe matrix van willen bouwen.
Helaas werk ik momenteel met DirectX8 en deze bevat deze functie niet tot zover ik weet :)

P.S:

Je bedoelt gewoon een diagonaalmatrix?


Ik heb geen idee wat een diagonaalmatrix is... zou je dat willen uitleggen?? :)

#8

stoker

    stoker


  • >1k berichten
  • 2746 berichten
  • Ervaren gebruiker

Geplaatst op 13 januari 2007 - 07:57

een rotatie rond de x-as krijg je met deze matrix:

LaTeX
met theta de draaihoek in tegenwijzerzin.
je zal deze of zn inverse nodig hebben





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures