Если у вас есть координаты этих двух точек, и если соотношение сторон этих координат является взаимно-однозначным, и если система координат определена так, что перемещение вправо увеличивает первую (x) координату, а движение вверх увеличиваетсявторая (y) координата, и если первая точка (x1, y1) является самой левой из этих двух точек, большинство компьютерных языков могут вычислить желаемый угол на
angle = atan2(y2 - y1, x2 - x1)
Поворот изображения на эту величинуугол по часовой стрелке установит две точки горизонтально друг к другу.Если возвращаемый угол отрицательный, измените его на положительный и поверните против часовой стрелки.
Обратите внимание, что несколько языков меняют координаты x и y, и большинство языков возвращает угол в радианах.(Если вам нужны градусы, умножьте получаемый угол в радианах на 180, а затем разделите на pi.) Если какое-либо из моих заявленных предположений неверно, эту формулу необходимо будет соответствующим образом скорректировать. Если у вас есть более подробная информация по любомуИз этих предположений, дайте мне знать, и я смогу скорректировать формулу для вас.
(Добавлено после попытки спрашивающего.)
Как я только что подчеркнул в моем оригиналеответ, моя формула зависит от нескольких предположений, являющихся правдой.Теперь, когда вы показали подробности своей попытки, я вижу, что два из предположений неверны.
Самое важное, одно из предположений «движение вверх увеличивает вторую (y) координату», что является стандартом для евклидовагеометрия.Во многих графических средах координата увеличивающейся секунды (y) перемещается на вниз , и ваш пример показывает, что это именно то, что вам нужно.С этим предположением измените мою формулу на
angle = atan2(y1 - y2, x2 - x1)
Обратите внимание, что я поменял местами y1
и y2
, что фактически заменяет каждое из них отрицательным.
Второе предположение«первая точка (x1, y1) является самой левой из этих двух точек».В вашем примере первая точка это точка крайняя справа , а не крайняя левая.Вы должны написать свою программу, чтобы поменять местами точки, если первая точка имеет большую координату X.
С этими изменениями ваши точки равны
pt1 = {X = 241 Y = 325}
pt2 = {X = 421 Y = 350}
и с использованием формулы angle = atan2(y1 - y2, x2 - x1)
даетрезультат
-0.13800602365751946
Этот угол отрицательный, поэтому поверните изображение против часовой стрелки на угол 0.13800602365751946
радиан, что составляет 7.907162702958458
градусов.
Попробуйтеи посмотреть, если это работает.Я не знаю ваш язык (это VB.NET?), Поэтому я не могу комментировать ваш код или показывать код для вашей среды.Я программирую на Python в эти дни.