Fråga : Översättning av koordinater från ett koordinerat system till another

På en täcka av pappers-:
The koordinerade som förhöjningar för X från koordinerade förhöjningar från vänster till höger för
The Y från vertikal
(0.0) lämnas corner.

I, har upptill två pekar på denna täcker: (x1, y1) och (x2, y1) (dvs., de är båda på det samma horisontal fodrar),

I photocopy nu denna täcker. Under photocopying det original- skyler över brister skiftat litet och roterar också litet. Som ett resultat min två som original pekar blev nu (på detta nytt täcka av pappers-):
(x3, y3) och (x4, y4).

Now som ges några, pekar (a1, b1) på original täcker av pappers-, vad skulle dess koordinater är på det nytt täcker av pappers-?

I tänkte att jag hade härlett den korrekta formulaten för denna, men jag verkar alltid för att vara några PIXEL off.

Thanks.
" klar "

Svar : Översättning av koordinater från ett koordinerat system till another

Du har antagligen redan härlett de korrekta likställandena, men låt oss går till och med det på något sätt.

Du önskar en styv omformning, som översätter (x1, y1) (x3, y3), och (x2, y1) till (x4, y4).

Vi kan funderare av den styva omformningen som en översättning som följs av en rotation.  Vi ska start med en översättning som flyttningar (x1, y1) till (x3, y3).  Detta är lätt:

(a, b) ---> (a + x3 - x1, b + y3 - y1)

ska gör trick.

Nu vi önskar en omformning som roterar runt om peka (x3, y3) så att peka ursprungligen på (x2, y1), som har kartlagts över (x2 + x3 - x1, y3), roterar över till (x4, y4).

Låt oss fungerar ut meta av denna rotation.  Återkalla att riktningen av en vektor (x, y) kan vara beslutsam vid atan2en (y, x) fungerar (mest matharkiv har en atan2, som bestämmer kvadranten av vektorn såväl som dess arctan - använder inte det enkla atan (y/x) fungerar för detta).

Så den sammanlagda rotationen är precis skillnaden mellan de två vinkelformiga riktningarna, det är

theta = atan2 (y4 - y3, x4 - x3) - atan2 (x2 - x1, 0)

(minns att vi behöver vektorer som startar på peka (x3, y3), så denna behöver att subtraheras från båda av pekar).

Godkänna nu, oss applicerar enkelt en rotationsfunktion.

(c, D) -----> (c * cos (theta) - D * synda (thetaen), c * synda (thetaen) + D * cos (thetaen))

var (c, D) = (a + x3 - x1, b + y3 - y1), från för.


Om du finner, att du kan, är vid några PIXEL nära kanta av ditt avbildar av, dig lider från ett upplösningsproblem: de riktiga lägena av dina två pekar är inte egentligen (x3, y3) och (x4, y4), men de är det mest nära koordinerar precis.  Detta påverkar inte översättningen, sedan det samma (under-PIXELet) felet får precis den fortplantade alltigenom avbilda.  Men för rotationen, ett litet fel i rotationen nära (x4, y4) kunde vända in i ett mer ytterligare away för större fel.  I stort felet ska är något runt om upplösningen av ditt avbildar delat av abs (x2 - x1).  Om x2 och x1 är nära tillsammans, du kan se varför du kan är av vid några PIXEL.

Det finns inte egentligen någon goda långt som ska korrigeras för denna, annan, än att få exaktare koordinerar för (x3, y3) och (x4, y4), eller få mappings för mer, än två pekar, och göra en bäst passform på översättningen och rotationen som du önskar.

Hoppas detta hjälper!
Andra lösningar  
 
programming4us programming4us