Я пытаюсь нарисовать повернутый эллипс, не центрированный в начале координат (в c ++).
, пока мой код "работает":
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). В этом примере точка на E2 находится под углом ~ 220-230 градусов.Я могу поймать этот угол, угол кажется нормальным.
Проблема в том, что если я попытаюсь спроецировать эту точку на E1, используя этуугол ~ 225 градусов, я в конечном итоге на втором красном круге сверху.похоже, мой угол теперь составляет ~ 265 градусов, но на самом деле, если я подгоню транспортир под мой эллипс, я получу правильный угол (~ 225), ср. img 2)
немного трудно увидеть угол наклона этого измененного транспортира, но он показывает ~ 225 градусов.
Мой вывод таков: эллипс нарисован так, как если бы мне пришлось нарисовать круг, а затем сжать его, что изменяет расстояние между углами.
Может кто-нибудь сказать мне, как яМожно ли это исправить?
PS: чтобы нарисовать те эллипсы, я просто использую цикл for, который строит точку под каждым углом (от 0 до 360).мы ясно видим на первом изображении, что расстояние между точками различно, находимся ли мы на 0 или на 90 градусов.