Угол точки вокруг определенной точки

Я провел некоторое исследование по вращению точки под определенным углом от определенной точки и вопроса: C ++: вращение вектора вокруг определенной точки До сих пор я придумал следовать, но это не дает мне правильного результата, может кто-нибудь определить проблему

const float angle = -90.0;
const float degreePerRadian = 57.2957795;
const float s = sin(angle / degreePerRadian);
const float c = cos(angle / degreePerRadian);
int p1x = 320;
int p1y = 480;
int p2x = 320;
int p2y = 320;

float centerX = (p2x - p1x) / 2 + p1x;
float centerY = (p2y - p1y) / 2 + p1y;
p2x -= centerX;
p2y -= centerY;
double newX = centerX + (p2x * c - p2y * s);
double newY = centerY + (p2x * s + p2y * c);

Я получаю: newX = 240 и newY = 400

РЕДАКТИРОВАТЬ:
Хотя у меня странный самолет

                                |
|    ^
|    |
|
-------> ^ (320, 480)    |   (y+)
90° |               |    |
|               |    |
|               |
. (320, 320)    |
|
|
--------------------------(0,0)
<-- (x+) --

Если и я хочу выяснить угол 90 градусов для точки (320, 480), если линия падает влево и вправо

На самом деле, чтобы быть более точным, плоскость перевернута вверх дном (в основном я использую QGraphicsScene, поэтому верхний левый угол равен 0,0, а нижний правый — ширина (), высота ().

                (x+) --->
(0,0) --------------------------
|
|
|      . (320, 320)
|      |
|      |
|      | 90°
|      . (320, 480)----------
|
|
(y+) |
|
|

0

Решение

Ваша 16-я строка кода по ссылке неверна. Так должно быть:

double newY = centerY + (p2x * s + p2y * c);

1

Другие решения

Других решений пока нет …