Я пытаюсь нарисовать повернутый эллипс, не центрированный в начале координат (в С ++).
пока мой код "работает":
for (double i = 0; i <= 360; i = i + 1) {
theta = i*pi / 180;
x = (polygonList[compt]->a_coeff / 2) * sin(theta) + polygonList[compt]->centroid->datapointx;
y = (polygonList[compt]->b_coeff / 2) * cos(theta) + polygonList[compt]->centroid->datapointy;
xTmp = (x - polygonList[compt]->centroid->datapointx)* cos(angle1) - (y - polygonList[compt]->centroid->datapointy)*sin(angle1) + polygonList[compt]->centroid->datapointx;
yTmp = (x - polygonList[compt]->centroid->datapointx)* sin(angle1) + (y - polygonList[compt]->centroid->datapointy)*cos(angle1) + polygonList[compt]->centroid->datapointy;
}
PolygonList - это список «блоков», который будет заменен эллипсом той же площади.
Моя проблема в том, что углы не совсем точны, как если бы мне пришлось поставить транспортир, который подходил бы по форме моего эллипса, транспортир, очевидно, сжался бы, как и углы (это ясно?)
Вот пример: я пытаюсь установить точку на верхнем эллипсе (E1), которая будет лежать на линии, проведенной между центроидом E1 и любой точкой на втором эллипсе (E2). В этом примере точка на Е2 лежит под углом ~ 220-230 градусов. Я могу поймать этот ракурс, он кажется нормальным.
Проблема в том, что если я попытаюсь спроецировать эту точку на E1, используя этот угол ~ 225 градусов, я окажусь на втором красном кружке сверху. похоже, что мой угол теперь составляет ~ 265 градусов, но на самом деле, если я формирую транспортир так, чтобы он соответствовал моему эллипсу, я получаю прямой угол (~ 225), см. img 2)
На этом преобразованном транспортире немного сложно увидеть угол, но он показывает ~ 225 градусов.
Я пришел к выводу, что эллипс нарисован так, как если бы мне нужно было нарисовать круг, а затем сжать его, что изменит расстояние между углами.
Может кто-нибудь сказать мне, как я могу это исправить?
PS: чтобы нарисовать эти эллипсы, я просто использую цикл for, который рисует точку под каждым углом (от 0 до 360). мы ясно видим на первом изображении, что расстояние между точками разное, находимся мы на 0 или на 90 градусах.