2012-05-08 3 views
1

я нашел this excellent question and answer, который начинается с x/y (плюс center x/y и degrees/radians) и вычисляет повернута к x'/y'. Этот расчет работает отлично, но я хотел бы запустить его в противоположном направлении; начиная с x'/y' и degrees/radians, я бы хотел рассчитать оригинал x/y и center x/y.точки на (ип) вращают прямоугольник

(x', y') = new position 
(xc, yc) = center point things rotate around 
(x, y) = initial point 
theta = counterclockwise rotation in radians (radians = degrees * Pi/180) 
dx = x - xc 
dy = y - yc 

x' = xc + dx cos(theta) - dy sin(theta) 
y' = yc + dx sin(theta) + dy cos(theta) 

Или в JavaScript/JQuery:

XYRotatesTo = function($element, iDegrees, iX, iY, iCenterXPercent, iCenterYPercent) { 
    var oPos = $element.position(), 
     iCenterX = ($element.outerWidth() * iCenterXPercent/100), 
     iCenterY = ($element.outerHeight() * iCenterYPercent/100), 
     iRadians = (iDegrees * Math.PI/180), 
     iDX = (oPos.left - iCenterX), 
     iDY = (oPos.top - iCenterY) 
    ; 

    return { 
     x: iCenterX + (iDX * Math.cos(iRadians)) - (iDY * Math.sin(iRadians)), 
     y: iCenterY + (iDX * Math.sin(iRadians)) + (iDY * Math.cos(iRadians)) 
    }; 
}; 

Математика/выше код решает для ситуации на рисунке A; он вычисляет положение пункта назначения x'/(зеленый круг) на основе известных значений для x/y (красный круг), center x/y (синяя звезда) и degrees/radians.

Но мне нужна математика/код для решения на рисунке B; где можно найти не только назначения x/y (зеленый круг), но и назначение center x/y (зеленую звезду) от известных значений исходного x/y (серого круга, хотя, вероятно, не требуется), назначение x'/y' (красный круг) и degrees/radians.

Diagram A and B

Код выше будет решить для назначения x/y (зеленый круг) с помощью iDegrees * -1 (благодаря @ Андрей ответа Кука, который с тех пор был удален от него), но для того, чтобы сделать это мне нужно кормить в это местоположение назначения center x/y (зеленая звезда), и что расчеты я в настоящее время отсутствует, как вы можете видеть на рисунке C, ниже:

Diagram C

Итак ... как я найти координаты ?/? (зеленая звезда) с данным кодом n, A (угол) и x'/y' (красный круг)?

ответ

0

Вы пытаетесь найти обратное преобразование. Вы начинаете с состава двух линейных преобразований, трансляции T и вращения R. Вы сначала применяете R к вектору x и T second, поэтому выражение y = TRx. Для решения обратной задачи вам потребуется обратный TR, написанный (TR) -1, который равен R -1 T -1. Обратное к вращению R - это просто поворот на отрицательный угол (который вы упомянули). Обратным к переводу является, таким же образом, исходный перевод, умноженный на -1. Таким образом, ваш ответ: x = R -1 T -1 y.

В вашей нынешней ситуации вам предоставляется поворот с помощью его угла, но вам нужно будет вычислить перевод. Вам понадобится серый круг, который вы не считаете нужным. Примените поворот R (не его обратный) к серому кругу. Вычтите эту точку из красного круга. Это оригинальный перевод T. Переверните знак, чтобы получить T -1.

Смежные вопросы