Если я правильно понял ваш вопрос:
given:
shape has corner (x1,y1), center (xc,yc)
rotated shape has corner (x1',y1') after being rotated about center
desired:
how to map any point of the shape (x,y) -> (x',y') by that same rotation
Вот соответствующие уравнения:
(x'-xc) = Kc*(x-xc) - Ks*(y-yc)
(y'-yc) = Ks*(x-xc) + Kc*(y-yc)
, где Kc=cos(theta)
и Ks=sin(theta)
и theta
- угол поворота против часовой стрелки. (для проверки: если theta = 0, это оставляет координаты без изменений, в противном случае, если xc = yc = 0, он отображает (1,0) в (cos (theta), sin (theta)) и (0,1) в (- sin (theta), cos (theta)). Предостережение: это для систем координат, где (x, y) = (1,1) находится в верхнем правом квадранте. Для вашего, где он находится в нижнем правом квадранте, theta будет угол поворота по часовой стрелке, а не против часовой стрелки.)
Если вы знаете координаты вашего прямоугольника, выровненного по осям x-y, xc будет просто средним значением двух x-координат, а yc будет средним значением двух y-координат. (в вашей ситуации это xc = 75, yc = 85.)
Если вы знаете тэту, у вас теперь достаточно информации для расчета новых координат.
Если вы не знаете тэту, вы можете решить для Kc, Ks. Вот соответствующие расчеты для вашего примера:
(62-75) = Kc*(50-75) - Ks*(50-85)
(40-85) = Ks*(50-75) + Kc*(50-85)
-13 = -25*Kc + 35*Ks = -25*Kc + 35*Ks
-45 = -25*Ks - 35*Kc = -35*Kc - 25*Ks
, которая представляет собой систему линейных уравнений , которую можно решить (упражнение для читателя: в MATLAB это:
[-25 35;-35 -25]\[-13;-45]
, чтобы в этом случае получить Kc = 1,027, Ks = 0,3622, что НЕ имеет смысла (K 2 = Kc 2 + Ks 2 равно должен равняться 1 для чистого вращения, в данном случае это K = 1,089), поэтому это не чистый поворот вокруг центра прямоугольника, как показывает ваш рисунок. И при этом это не кажется чистым вращением о происхождении. Чтобы проверить, сравните расстояния от центра вращения до и после вращения, используя теорему Пифагора, d 2 = deltax 2 + deltay 2 . (для поворота около xc = 75, yc = 85 расстояние до 43.01, расстояние до 46.84, отношение равно K = 1.089; для поворота вокруг начала расстояние до 70.71, расстояние после 73.78, соотношение 1.043. I Можно полагать, что при округлении координат до целых чисел возникнут отношения 1,01 или менее, но это явно больше, чем ошибка округления)
Так что здесь есть некоторая недостающая информация. Как вы получили цифры (62,40)?
Это основная суть математики, стоящей за вращениями, однако.
редактировать: ага, я не понял, что это были оценки. (довольно близко к реалистичности!)