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!