1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // twee willekeurie vectoren Camvec=[0 0 1] Tablevec=[0 1 1] // Normaliseren (|vec|=1) CamNormal=Camvec/norm(Camvec) TableNormal=Tablevec/norm(Tablevec) // Rot. vector opstellen (4 element vector // The result R is a 4-element axis-angle rotation row vector. // First three elements specify the rotation axis, the last element // defines the angle of rotation. R=vrrotvec(CamNormal,TableNormal) // Rotational matrix opstellen obv axis-angle rot vector (blijkt in matlab te zitten) m = vrrotvec2mat(R) |
1 2 3 4 5 6 | R = -1.0000 0 0 0.7854 m = 1.0000 0 0 0 0.7071 0.7071 0 -0.7071 0.7071 |
Punt 1: Klopt, je moet nog transleren met [324 0 0, 0 110 0, 0 0 -636] uitgaande van coordinaten voor LV in een eerdere post. Stel we noemen deze matrix t, dan krijg je tablenormal = m*camnormal + tquote:Waarom niet?
- Z as cam space is denk ik nu wel ' gedraaid ' om parallel to lopen met Z as tablespace, maar hij is in ieder geval nog niet echt OP dezelfde as denk ik zo, alleen parallel aan. (daar heb ik ws offset voor nodig).
- Verder; hoewel de Z as dan 'klopt', dan kloppen de X en Y assen toch nog niet per definitie? Moet ik hierna dan nog eens gaan roteren om de Z as?
De X assen alignen zou moeten kunnen ja, bv alignen met de vector LV -> RV? Alleen heb ik lichte twijfels of de Z as dan wel fixed blijft qua richting. Wellicht zal ik dan RV in ieder geval op dezelfde Z moeten zetten (forced) als LV. (onnauwkeurigheid in XY qua uitlijnen is minder belangrijk dan de richting van Z)quote:Punt 2: Als je alleen de vector alignt (zoals je nu doet) heb je daar inderdaad een punt mee. Je zou om de Z as kunnen gaan draaien, maar ik denk dat het ook wel mogelijk is om na de eerste align de X assen te alignen.
1 | function lclCoord = global2localcoord(gCoord,option,localOrigin,localAxes) |
1 | tablecoords = tableAxes.' * (camcoord- tableOrigin*ones(1,size(tablecoord,2))); |
Een affiene transformatie is een afbeelding, waarbij elke barycentrische combinatie van punten afgebeeld wordt op een nieuwe barycentrische combinatie van punten. Men kan dan aantonen dat transformaties als spiegelingen, rotaties, ... affiene transformaties zijn. Zo kan men aan de hand van rotatiematrices, homothetiematrices, ... de nieuwe coördinaten van de getransformeerde figuren berekenen. Belangrijk is hierbij dat de basis niet verandert, je blijft dus hetzelfde assenstelsel gebruiken. Dat is dus zoals je ziet, helemaal niet wat we in dit geval aan het doen zijn.quote:Op zaterdag 28 april 2012 15:44 schreef Azreal het volgende:
@yamamc: wat is precies het verschil tussen een affine transformatie en transformatie naar een andere basis? Het klinkt namelijk alsof je precies hetzelfde aan het doen bent en P de transformatiematrix voor de affine transformatie is. Maar zoals gezegd, ben niet echt de expert en mijn laatste confrontatie met affine transformatie was het patchen van slechte code van een vriendin van me.
Duidelijk, tnx! Snap nu ook waarom ik het verschil niet zag.quote:Op zaterdag 28 april 2012 17:21 schreef yarnamc het volgende:
[..]
Een affiene transformatie is een afbeelding, waarbij elke barycentrische combinatie van punten afgebeeld wordt op een nieuwe barycentrische combinatie van punten. Men kan dan aantonen dat transformaties als spiegelingen, rotaties, ... affiene transformaties zijn. Zo kan men aan de hand van rotatiematrices, homothetiematrices, ... de nieuwe coördinaten van de getransformeerde figuren berekenen. Belangrijk is hierbij dat de basis niet verandert, je blijft dus hetzelfde assenstelsel gebruiken. Dat is dus zoals je ziet, helemaal niet wat we in dit geval aan het doen zijn.
In dit geval laten we namelijk alle punten op hun plaats staan, maar veranderen we het assenstelsel (eigenlijk exact het omgekeerde van de affiene transformatie). Dit noemen we dan ook een coördinatentransformatie. Het zijn eigenlijk twee volstrekt verschillende dingen, maar men kan bewijzen, dat de matrices van de affiene transformatie omgezet kunnen worden in deze van een equivalente coördinatentransformatie en andersom. Maar het is om verwarring te vermijden beter de twee te scheiden, als je de twee niet 100% uit elkaar kunt houden. Er zijn namelijk subtiele en belangrijke verschillen in de formules, zo is bijvoorbeeld bij een coördinatentransformatie s = As' (met s' de nieuwe coördinaten, formule geldt indien er geen translatievector is) en bij de affiene transformatie s' = As (met dezelfde betekenis van de symbolen). Men maakt dus nogal snel fouten, als men dit niet opmerkt.
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |