Προς το περιεχόμενο

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

godlike

Μαθηματική ερώτηση σχετικά με affine tranformations με χρήση πινάκων.

Προτεινόμενες αναρτήσεις

Το πρόβλημα είναι ως εξής. Έχω 3 σημεία στον χώρο H, T και Α των οποίων γνωρίζω τις συντεταγμένες.

 

mathimatika-erotisi.png

 

Τα Τ, Η και Α γίνονται translate ή και rotate ή και scale στον χώρο και οι νέες συντεταγμένες των Τ και Η είναι Τ' και Η' τις οποίες και γνωρίζω δηλ.

 

mathimatika-erotisi-2.png

 

Το πρόβλημα είναι να βρω το Α'. Θέλω να βρω τον 4x4 transformation matrix ο οποίος όταν θα τον πολλαπλασιάζω με τις συντεταγμένες του Α θα μου δίνει τις συντεταγμένες του Α'

 

 

Ευχαριστώ εκ των προτέρων και ελπίζω να έγινα κατανοητός.

 

 

ΥΓ: Είναι το αντίθετο από αυτό στο οποίο γνωρίζω τους rotation matrices (δηλ γωνίες), τον translation matrix και τον scale matrix και ψάχνω τα Τ', Η'.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Αν κατάλαβα καλά έχεις Vector A (x,y,z) τo οποίo γνωρίζεις. Επιπλέον γνωρίζεις το Vector translation(t_x, t_y, t_z), το rotation (π.x. π/2 στον x axis), και το Vector scale(s_x, s_y, s_z) - βάζω 3 συντεταγμένες ώστε να υπολογίζεις και non-uniform scales. Εκτός από αυτά έχεις και τον Vector A(x,y,z). Αν δουλεύεις σε OpenGL (φαντάζομαι για graphics τα θες) χρησιμοποιείς column vector order ενώ αν δουλεύεις σε DirectX χρησιμοποιείς row vector order. Δεν έχει και τόσο σημασία βέβαια καθώς με ένα transpose στρώνεις.

π.χ. σε OpenGL

identity matrix =

[1, 0, 0, 0]

[0, 1, 0, 0]

[0, 0, 1, 0]

[0, 0, 0, 1]

 

original matrix A =

[1, 0, 0, x]

[0, 1, 0, y]

[0, 0, 1, z]

[0, 0, 0, 1]

 

translation matrix A' =

[1, 0, 0, t_x]

[0, 1, 0, t_y]

[0, 0, 1, t_z]

[0, 0, 0, 1 ]

 

rotation matrix A' x-axis by a degrees =

[1, 0, 0, 0]

[0, cosa, -sina, 0]

[0, sina, cosa, 0]

[0, 0, 0, 1]

 

rotation matrix A' y-axis by a degrees =

[cosa, 0, sina, 0]

[0, 1, 0, 0]

[-sina, 0, cosa, 0]

[0, 0, 0, 1]

 

rotation matrix A' z-axis by a degrees =

[cosa, -sina, 0, 0]

[sina, cosa, 0, 0]

[0, 0, 1, 0]

[0, 0, 0, 1]

 

Αν τώρα θες να κάνεις rotation by arbitrary axis χρησιμοποιείς άλλους πίνακες.

 

scale matrix A' =

[s_x, 0, 0, 0]

[0, s_y, 0, 0]

[0, 0, s_z, 0]

[0, 0, 0, 1]

 

ο τελικός σου matrix Α_transformed βγαίνει από το πολλαπλασιασμό scale A' * rotation A' * translation A'.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

όπως τα λέει ο kickeras,

 

νομίζω δεν σου χρειάζονται καν δυο σημεία (πως μετασχηματίζονται) μόνο ένα.

 

στο σχήμα σου πχ που στρίβεις το Η και το Τ κατά θ έχεις

 

Τ'=R(θ) T

 

όπου Τ'=(χ',y') και Τ=(χ,y)

 

>

R(θ)= |  cosθ  sinθ  |
     | -sinθ  cosθ  |

 

από το σύστημα βρίσκεις το θ και απο εκεί το Α'

 

τα ίδια ανάλογα με τον μετασχηματισμό

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Χεχε όντος για γραφικά είναι το πρόβλημα. Μιας και ξέρεις να το θέσω όσο πιο απλά γίνεται χωρίς τις μαθηματικές μανούρες.

 

Έχω ένα bone και το vector H είναι το head του kai to Τ είναι η tail του. Το Α είναι ένα vertex που κουνιέται με βάση αυτό το bone. Στο επόμενο καρέ το bone πάει στα H`και Τʼ. Το Α που πάει;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Φαντάζομαι ότι το object bone που έχεις αποτελείται από ένα σύνολο από vertices(Τ,Η,Α,etc.). Ε πολλαπλασιάζεις το Α με τον ίδιο transformation matrix που πολλαπλασιάζεις το Τ, το Η και γενικά όλα τα verts του object bone. Προσοχή μιας και δουλέυεις με bones γιατί παίζεις με skinned meshes και τα transformations γίνονται σε συνδυασμό με την ολική κίνηση του σκελετού.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Φαντάζομαι ότι το object bone που έχεις αποτελείται από ένα σύνολο από vertices(Τ,Η,Α,etc.). Ε πολλαπλασιάζεις το Α με τον ίδιο transformation matrix που πολλαπλασιάζεις το Τ, το Η και γενικά όλα τα verts του object bone. Προσοχή μιας και δουλέυεις με bones γιατί παίζεις με skinned meshes και τα transformations γίνονται σε συνδυασμό με την ολική κίνηση του σκελετού.

 

Το πρόβλημα είναι ότι δεν ξέρω ποιος είναι ο matrix που κίνησε το bone για να τον χρησιμοποιήσω και πολλαπλασιάσω το Α (και τα όμοιά του). Αυτόν ψάχνω.

 

ισχύει: matrix * T = T´

 

Εγώ ξέρω Τ και Τ΄και ψάχνω τον matrix

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δε ξέρεις το κατά πόσο γίνεται translate, rotate ή scale to T? Αλλιώς δε γίνεται να υπολογίσεις αυτό που λες. Βέβαια μπορείς να το πάρεις μόνο με translation στο χώρο το οποίο φυσικά δεν είναι σωστο.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...