Как можно повернуть треугольник вокруг центра описанной окружности?

void TTriangle::rotateTriangle(double angle) {
double ox = -(1.0 / 2) * ((A.y * (pow(B.x, 2) + pow(B.y, 2) - pow(C.x, 2) - pow(C.y, 2)) + B.y * (pow(C.x, 2) + pow(C.y, 2) - pow(A.x, 2) - pow(A.y, 2)) + C.y * (pow(A.x, 2) + pow(A.y, 2) - pow(B.x, 2) - pow(B.y, 2))) / (A.x * (B.y - C.y) + B.x * (C.y - A.y) + C.x * (A.y - B.y)));
double oy = (1.0 / 2) * ((A.x * (pow(B.x, 2) + pow(B.y, 2) - pow(C.x, 2) - pow(C.y, 2)) + B.x * (pow(C.x, 2) + pow(C.y, 2) - pow(A.x, 2) - pow(A.y, 2)) + C.x * (pow(A.x, 2) + pow(A.y, 2) - pow(B.x, 2) - pow(B.y, 2))) / (A.x * (B.y - C.y) + B.x * (C.y - A.y) + C.x * (A.y - B.y)));
A.x = (A.x - ox) * cos(angle * PI / 180) - (A.y - oy) * sin(angle * PI / 180) + ox;
A.y = (A.x - ox) * sin(angle * PI / 180) + (A.y - oy) * cos(angle * PI / 180) + oy;
B.x = (B.x - ox) * cos(angle * PI / 180) - (B.y - oy) * sin(angle * PI / 180) + ox;
B.y = (B.x - ox) * sin(angle * PI / 180) + (B.y - oy) * cos(angle * PI / 180) + oy;
C.x = (C.x - ox) * cos(angle * PI / 180) - (C.y - oy) * sin(angle * PI / 180) + ox;
C.y = (C.x - ox) * sin(angle * PI / 180) + (C.y - oy) * cos(angle * PI / 180) + oy;
}

Что тут не так?


Ответы (1 шт):

Автор решения: MBo

Если необъятная формула выписана верно, то ошибка в следующем - вы используете модифицированное значение Х-координаты для расчёта Y-координаты. Запомните Ax (Bx, Cx) перед его изменением и примените в следующих строчках

→ Ссылка