Я нашел отличный вопрос и ответ, который начинается с 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'
/y'
(зеленый круг) на основе известных значений для x
/y
(красный круг), center x/y
(синяя звезда) и degrees/radians
.
Но мне нужна математика/код, чтобы решить рисунок B; где я могу найти не только пункт назначения x
/y
(зеленый кружок), но и пункт назначения center x/y
(зеленая звездочка) по известным значениям начальных x
/y
(серый кружок, хотя, вероятно, не нужен), пункт назначения x'
/y'
(красный кружок) и degrees/radians
.
Приведенный выше код будет определять пункт назначения x
/y
(зеленый кружок) через iDegrees * -1
(благодаря ответу @andrew cooke, который с тех пор был им удален), но для этого мне нужно ввести в него местоположение пункта назначения. center x/y
(зеленая звездочка), и это расчеты, которые мне сейчас не хватает, как вы можете видеть на диаграмме C ниже:
Итак... как мне найти координаты ?
/?
(зеленая звезда) по данным n
, A
(угол) и x'
/y'
(красный кружок)?