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