Két mátrix közötti különbség kiszámolása

Két mátrix közötti különbség kiszámolása
2006-10-28T16:19:55+02:00
2006-11-05T17:41:48+01:00
2022-11-02T03:35:54+01:00
sonka_vac
Hello! Az új projektemben a cameraclass-t írom, és szükségem lenne majd a későbbiekben egy olyan pontra, ami pont a kamera előtt áll kicsivel (asszem ezt hivják ray-nek - ha hülyeség, akkor nem mondtam semmit). Tehát ez a pont az, ahol akkor állnék, ha az adott pillanatban egy "egységnyit" előrelépnék. Ez persze nem nehéz, ha a forgásokat én számítom ki, de mivel az OpenGL beépített fv-eit használom
(
glRotatef(lookud, 1,0,0); //lookud : fel-le (0°:közép, 90°:fel, -90°:le) glRotatef(-heading, 0,1,0); //heading az oldalirányú forgás glTranslatef(-pos.x, -pos.y, -pos.z); // ez pedig a pozíció
)
ezért arra gondoltam (mivel a pont pozicioja megvan, ha elmozdulás történik, de pl. fel-le forgásnál nem, illetve oldalirányba történő forgás közben csak akkor ugrik megfelelő helyre, ha már megmozdultam valamere), hogy az identity- és a pillanatnyi mátrix közötti különbségből megállapíthatnám, hogy hova esik az a pont.
A problémák a következők:
1. Hogy számolom ki a két mátrix közötti különbséget?
2. Melyek a mátrixnak azok az elemei, amelyek a forgás, illetve az elmozdulásokért "felelősek"?
3. Jó egyáltalán ez az ötlet?

A válaszokat előre is köszönöm:

sonka
Mutasd a teljes hozzászólást!
derekszogu koordinatarendszer: a szokasos, van 3 egysegvektorod (i,j,k a nevuk altalaban), mind meroleges a masik kettore (terben persze), es i,j,k jobbrendszert alkot (ha fogod a jobb kezedet, akkor a mutatoujjadat (j vektor) nyujtsd ki elore, a kozepsot (k) ra merolegesen, a huvelykujjadat (i) meg kifele.. ekkor i,j,k jobbrendszert alkot, szamit a sorrend)
derekszogu Descartes-i koordinatarendszerben 3 dimenzioban 3 koordinata van, (x,y,z) ami azt mondja meg, hogy az i,j,k egysegvektorokat hanyszorosara kell nyujtani, hogy osszeguk megadja az altaluk leirt pont helyet a terben..

ez gondolom ismeros volt..

a homogen koordinatarendszerben (3D-ben) 4 koordinata van..
a derekszogubol ugy tudsz atmenni a homogenbe, hogy egy 1-est irsz utolso koordinatanak, tehat (x,y,z) ==> (x,y,z,1)
visszafele ugy, hogy leosztod az elso 3 koordinata mindegyiket az utolsoval:
(x,y,z,s) ==> (x/s,y/s,z/s)
van erre egy szemleletes magyarazat sulyokkal, de az csak eleg elvont fizikai szemlelettel szemleletes (a negativ sulyok miatt), ugyhogy nem irom le..
technikai elonye az, hogy igy matrixszorzassal leirhato az eltolas, amit 3 koordianata eseten csak egy plusz vektor hozzaadassaval lehetne megoldani..

az, hogy a leirasok elternek, eleg egyszeru okkal magyarazhato:
ha van egy A es egy B matrixod, akkor A*B != B*A, nem kommutativ a matrixszorzas.. egyes esetekben A*B nem hogy nem egyezik B*A eredmenyevel, hanem (eltero meretek eseten) meg nem is biztos, hogy ertelmezheto..
namost.. masutt lesznek a kulonbozo transzformaciokat befolyasolo egyutthatok, ha a matrixszal jobbrol, illetve balrol szorzol..
a transzformaciok matrixait meg osszeszorozni kell, es nem csak igy siman beirogatni szamokat kulonbozo helyeire (bar speci esetekben egyezhet).. szoval visszaalakitani szerintem remenytelen..


a homogen, mint szo egyezot jelent, es nemtom mi koze van ennek a koordinatarendszernek ehhez.. (talan a sulyok miatt)
parja a heterogen, ami meg vegyest jelent..
Mutasd a teljes hozzászólást!

  • Milyen városban laksz? Van könyvtár? Bemégy, kiveszel egy matematikai könyvet, öcsesz, vagy fölkeresel egy matektanárt.
    Mutasd a teljes hozzászólást!
  • Kiindulásnak:

    for(i=0;i<y;i++)for(j=0;j<x;j++)c[*i][j]=a[*i][j]-b[*i][j];

    (Persze csillagok nélkül.)
    Mutasd a teljes hozzászólást!
  • Már "próbáltam" matek könyvet, csak hogy is mondjam finoman: semmit nem értettem belőle!
    Mutasd a teljes hozzászólást!
  • gamedev.net
    articles
    math
    Mutasd a teljes hozzászólást!
  • Most azt akarod, hogy én magyarázzam el neked? Jóég.
    Mutasd a teljes hozzászólást!
  • a b c
    d e f
    g h i

    és

    A B C
    D E F
    G H I

    mátrixok különbsége

    (a-A) (b-B) (c-C)
    (d-D) (e-E) (f-F)
    (g-G) (h-H) (i-I)

    Szerintem ez b_aromi egyszerű. Művész vagy, ha ezt nem értetted meg.
    Mutasd a teljes hozzászólást!
  • miert nem hasznalsz gluLookAt-et? valamivel egyszerubb talan a kamera beallitasa.. 3 darab 3D vektort ker parameterul, a kamera poziciojat, az iranyt (amerre nez), es a felfele iranyt (hogy a monitoron a celtargy hogyan jelenjen meg)
    raadasul ha igy allitod be, akkor egyszeruen a kamera poziciojahoz hozzaadhatod a (normalizalt) iranyvektort, es megkapod ezt a bizonyos pontot..

    1. ket matrix kulonbseege valoban az, amit davidsusu irt.. persze azzal az elteressel, hogy itt 4x4-es matrixok vannak, mert homogen koordinatarendszert hasznal a gep, es nem a derekszogu Descartes-it
    2. ez ennyire nem egyszeru.. a 3 transzformacionak van egy-egy matrixa, ezek szorzata lesz az, amit vegul kapsz.. a jobb also nagyjabol a nagyitasert felel, a jobb oszlopvektor felso 3 komponense az eltolassal kapcsolatos, a tobbi meg a tobbivel.. most nem latom at, hogy lehetne "szetbontani" egy ilyet.. (sima derekszoguben meg egyszerubb lenne, mert ott az oszlopvektorok az egysegvektorok kepet adjak meg)
    3. szerintem nem
    Mutasd a teljes hozzászólást!
  • Jah, hogy csak ennyi.. LOL Köszi a válaszokat! Azt már tudom mi az a transpose mátrix :D Kis gondolkodással rájöttem, hogy tényleg nem jó az ötlet. gluLookAt-et őszintén nem nagyon szeretem, de talán ez több okból is jobb lenne. Az irányvektort viszont mindenhogy ki kell számítani, erre lennék kíváncsi! Ja, és mi az hogy homogén? Már egy ideje idegesít, hogy nem tudom ennek a szónak a jelentését...
    A mátrixok ha jól emlékszem valahogy így tárolják a forgatást, eltolást, méretezést:

    fx 0 0 tx
    0 fx 0 ty
    0 0 fy tz
    0 0 0 0

    A scale-t nemtudom. talán az utolsó sor utolsó háromban. Csak azért kérdeztem, mert pár helyen utánanéztem, és mindegyik másikat írt...
    Mutasd a teljes hozzászólást!
  • derekszogu koordinatarendszer: a szokasos, van 3 egysegvektorod (i,j,k a nevuk altalaban), mind meroleges a masik kettore (terben persze), es i,j,k jobbrendszert alkot (ha fogod a jobb kezedet, akkor a mutatoujjadat (j vektor) nyujtsd ki elore, a kozepsot (k) ra merolegesen, a huvelykujjadat (i) meg kifele.. ekkor i,j,k jobbrendszert alkot, szamit a sorrend)
    derekszogu Descartes-i koordinatarendszerben 3 dimenzioban 3 koordinata van, (x,y,z) ami azt mondja meg, hogy az i,j,k egysegvektorokat hanyszorosara kell nyujtani, hogy osszeguk megadja az altaluk leirt pont helyet a terben..

    ez gondolom ismeros volt..

    a homogen koordinatarendszerben (3D-ben) 4 koordinata van..
    a derekszogubol ugy tudsz atmenni a homogenbe, hogy egy 1-est irsz utolso koordinatanak, tehat (x,y,z) ==> (x,y,z,1)
    visszafele ugy, hogy leosztod az elso 3 koordinata mindegyiket az utolsoval:
    (x,y,z,s) ==> (x/s,y/s,z/s)
    van erre egy szemleletes magyarazat sulyokkal, de az csak eleg elvont fizikai szemlelettel szemleletes (a negativ sulyok miatt), ugyhogy nem irom le..
    technikai elonye az, hogy igy matrixszorzassal leirhato az eltolas, amit 3 koordianata eseten csak egy plusz vektor hozzaadassaval lehetne megoldani..

    az, hogy a leirasok elternek, eleg egyszeru okkal magyarazhato:
    ha van egy A es egy B matrixod, akkor A*B != B*A, nem kommutativ a matrixszorzas.. egyes esetekben A*B nem hogy nem egyezik B*A eredmenyevel, hanem (eltero meretek eseten) meg nem is biztos, hogy ertelmezheto..
    namost.. masutt lesznek a kulonbozo transzformaciokat befolyasolo egyutthatok, ha a matrixszal jobbrol, illetve balrol szorzol..
    a transzformaciok matrixait meg osszeszorozni kell, es nem csak igy siman beirogatni szamokat kulonbozo helyeire (bar speci esetekben egyezhet).. szoval visszaalakitani szerintem remenytelen..


    a homogen, mint szo egyezot jelent, es nemtom mi koze van ennek a koordinatarendszernek ehhez.. (talan a sulyok miatt)
    parja a heterogen, ami meg vegyest jelent..
    Mutasd a teljes hozzászólást!
  • Hát ezt a felső matematkát nem nagyon értem. Vagyis ez teljesen tiszta, amit elmondtál, csak más (minden más) nem megy...
    Viszont.. arra gondoltam, hogy az elfordulásomból kitudnám számítani az irányvektorom, legalábbis gondolom..
    Ha a forgatások ellőt Z-ből kivonnék mondjuk kettőt(ugye minden rajzolásnál Identity mátrixból indulunk, és akkor az előttünk lévő tengely(rész) a negatív Z) akkor lenne egy vektorom (0, 0, -2). Ezt el kellene forgatnom annyira oldalirányba, amennyire a kam el van fordulva, aztán pedig az X tengelyen, és akkor kapnék egy egy vektort ami előttem áll kettővel.. jól gondolom? ~:-\ (Ja megmég persze el is kéne tolni)
    Mutasd a teljes hozzászólást!
  • fx 0 0 tx
    0 fx 0 ty
    0 0 fy tz
    0 0 0 0




    Én a helyedben nekiesnék még a matekkönyvnek...
    Mutasd a teljes hozzászólást!
  • Ha tanultuk volna matekból, nem kérdezném, LOL
    Mutasd a teljes hozzászólást!
  • Nézd már meg, hogy melyik hozzászólásodra válaszoltam..
    Mutasd a teljes hozzászólást!
  • Nem értem ez mit változtat a helyzeten. Mmint a hozzászólás.

    Mostanában túl sok értelmetlen topikot nyitok, ugyhogy megpróbálom visszafogni magam
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd