Vous avez probablement déjà dérivé les équations correctes, mais nous laisser passent par lui de toute façon.
Vous voulez une transformation rigide qui traduit (x1, y1) (x3, y3), et (x2, y1) à (x4, y4).
Nous pouvons penser à la transformation rigide comme traduction, suivi d'une rotation. Nous commencerons par une traduction à la laquelle se déplace (x1, y1) (x3, y3). C'est facile :
(a, b) ---> (a + x3 - x1, b + y3 - y1)
fera le tour.
Maintenant, nous voulons une transformation à qui tourne autour du point (x3, y3) de sorte que le point à l'origine (x2, y1), qui a été tracé plus de (x2 + x3 - x1, y3), tourne plus de jusqu'(x4, y4).
Établissons l'angle de cette rotation. Se rappeler que la direction d'un vecteur (x, y) peut être déterminé par l'atan2 (y, x) fonction (la plupart des bibliothèques mathématiques ont un atan2 qui détermine le quart de cercle du vecteur comme son arctan - n'emploient pas l'atan simple (y/x) fonction pour ceci).
Ainsi toute la rotation est juste la différence entre les deux directions angulaires, celle est
thêta = atan2 (y4 - y3, x4 - x3) - atan2 (x2 - x1, 0)
(se rappeler que nous avons besoin de vecteurs qui commencent au point (x3, y3), ainsi ceci doit être soustrait de tous les deux points).
Ok, maintenant, nous appliquons simplement une opération de rotation.
(c, d) -----> (c * cos (thêta) - d * péché (thêta), c * péché (thêta) + d * cos (thêta))
là où (c, d) = (a + x3 - x1, b + y3 - y1), d'avant.
Si vous constatez que vous pourriez ne pas être en ligne par quelques Pixel près du bord de votre image, vous souffrez d'un problème de résolution : les endroits vrais de vos deux points ne sont pas vraiment (x3, y3) et (x4, y4), mais ceux sont juste les plus étroits coordonne. Ceci n'affecte pas la traduction, puisque la même erreur (de secondaire-Pixel) obtient juste propagée dans toute l'image. Mais pour la rotation, une petite erreur dans la rotation près (x4, y4) pourrait se transformer en plus grande erreur plus loin parti. Fondamentalement, l'erreur sera quelque chose autour de la résolution de votre image divisée par l'ABS (x2 - x1). Si x2 et x1 sont étroits ensemble, vous pouvez voir pourquoi vous pourriez ne pas être en ligne par quelques Pixel.
Il n'y a vraiment aucune bonne manière de corriger pour ceci, autre que l'obtention plus précise coordonne pour (x3, y3) et (x4, y4), ou obtenant des tracés pour plus de deux points, et faisant un de l'ajustement normal sur la traduction et la rotation que vous voulez.
Espérer que ceci aide !