Вы вероятно уже выводили правильно уровнения, но препятствуйте нам идите через его так или иначе.
Вы хотите твердое преобразование переводит (x1, y1) (x3, y3), и (x2, y1) к (x4, y4).
Мы можем думать твердого преобразования как перевод, после того как мы последованы за вращением. Мы начнем с переводом двигает (x1, y1) к (x3, y3). Это легко:
(a, b) ---> (a + x3 - x1, b + y3 - y1)
сделает выходку.
Теперь, мы хотим преобразование которое вращает вокруг пункта (x3, y3) так, что пункт первоначально на (x2, y1), которое было составлено карту сверх (x2 + x3 - x1, y3), вращает сверх к (x4, y4).
Препятствуйте нам разработать угол этого вращения. Вспомните что направление вектора (x, y) может быть определено (y, x) функцией atan2 (большинств архивы математики имеют atan2 которое обусловливает квадрант вектора так же, как сво arctan - не используют просто atan функцию (y/x) для этого).
Так полным вращением будет как раз разница между 2 угловыми направлениями, то
тэта = atan2 (y4 - y3, x4 - x3) - atan2 (x2 - x1, 0)
(вспомните что нам нужны векторы начинают на этап (x3, y3), поэтому этому нужно быть вичтенным от обоих из пунктов).
О'кейо, теперь, мы просто прикладываем деятельность вращения.
(c, d) -----> (c * cos (тэта) - d * согрешение (тэта), c * согрешение (тэта) + d * cos (тэта))
где (c, d) = (a + x3 - x1, b + y3 - y1), от раньше.
Если вы находите, то что вы могли быть немного пикселов около края вашего изображения, вы терпите от проблемы разрешения: поистине положения ваших 2 пунктов не реально (x3, y3) и (x4, y4), но те как раз самыми близкими координируют. Это не влияет на перевод, в виду того что такая же ошибка (sub-пиксела) как раз получает распространенной в течении изображения. Но для вращения, малая ошибка в вращении ближайше (x4, y4) smogла повернуть в более большую ошибку более далеко отсутствующим. Основно, ошибка будет что-то вокруг разрешения вашего изображения разделенного abs (x2 - x1). Если x2 и x1 близки совместно, то вы можете увидеть почему вы могли быть немного пикселов.
Не будет реально хорошей дороги вводить поправку на это, за исключением получать более точна координирует для (x3, y3) и (x4, y4), или получающ mappings для больше чем 2 пунктов, и делающ наиболее пригодный на переводе и вращении, котор вы хотите.
Понадейтесь что это помогает!