(В предположении, что оба вектора, которые представляют собой эллипс оси parllel осям координат)
Если у вас есть радиальный луч, выходящий из центра многоточия под углом angle
, то этот луч пересекает эллипс в точке
x = x_half_axis * cos(angle);
y = y_half_axis * sin(angle);
где x_half_axis
и y_half_axis
возраст только длины (величины) ваших векторов на оси.
Итак, просто выберите достаточно маленький шаг угла delta
. Проведите вокруг своей центральной точки по всему диапазону [0...2*Pi]
с этим шагом, начиная с 0
угла, затем delta
угол, затем 2 * delta
угол и так далее. Для каждого значения angle
координаты точки эллипса будут задаваться приведенными выше формулами. Таким образом, вы создадите многоугольное представление эллипса.
Если delta
относительно большие (несколько точек на эллипсе), то следует тщательно выбирать, чтобы убедиться, что ваш «эллиптический многоугольник» закрывает красиво: 2*Pi
должны разделиться на целый ряд delta
шагов. Хотя для небольших значений delta
это не имеет значения.
Если минимальные векторы-максимум оси не параллельны осям координат, ваш может все еще использовать вышеуказанный подход, а затем преобразовать результирующие точки к соответствующему конечному положению, применяя соответствующее преобразование вращения.
У стойки с фиксированной дельтами угла есть некоторые недостатки. Он генерирует более плотную последовательность полигональных точек вблизи оси миминуса эллипса (где кривизна меньше) и более редкая последовательность точек вблизи максимальной оси (где кривизна больше). Это фактически противоположно желаемому поведению: лучше иметь более высокую точечную плотность в областях с более высокой кривизной.
Если это проблема для вас, то вы можете обновить алгоритм, чтобы он использовал вариационный степпинг. Дельта треугольника должна постепенно уменьшаться по мере приближения к максимальной оси и возрастать по мере приближения к минимальной оси.
Это называется тесселяция. Поищи это. Вы хотите тесселировать кривую. Самый простой способ - начать с параметрического представления кривой. Посмотрите это тоже. –
Вы должны определить требования к этим полилиниям – MBo
Это называется уплощением кривой. –