Как можно повернуть треугольник вокруг центра описанной окружности?
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) перед его изменением и примените в следующих строчках