Я могу представить два способа создания класса Ellipse.Как описать эллипс, подходящий для 3D (геометрия, рендеринг, физика), на любом языке
В математике эллипс описывается двумя координационными точками и основной или полуосейной длиной оси.
Типичная структура будет выглядеть так:
- focus1: Vector3D
- focus2: Vector3D
- semiMajorAxis: двойной
- planeNormal: Vector3D
Однако, я нашел это будет субоптимальным, потому что 99% времени, мне действительно не нужны координационные центры.
Это сложнее выяснить, как пересекаться с линиями или лучами или выполнять проекции.
Вместо этого я представлял бы эллипс как протянутый круг вдоль вектора.
структура будет чем-то вроде этого:
- центр: Vector3D
- радиус: двойной
- stretchVector: Vector3D (ось, вдоль которой применяется растяжение)
- stretchRate: двойной
- planeNormal: Vector3D
Идея состоит в том, чтобы выполнить все тесты/трассы/проекции, как если бы это было сделано против простого круга, просто путем масштабирования значений и значений, прежде чем отправлять их методам круга.
Однако я не хватает опыта в этой области, поэтому я не уверен, какой из них является:
- легче использовать
- быстрее вычислить (это 3D, так Я нужен хороший perfs)
EDIT: на самом деле мне нужен эллипс в гранях объема (цилиндр секции, конусные сек), а не движения. Таким образом, мое основное использование было бы раистатом или пересечением его линиями, плоскостями, кругами, другими эллипсами и т. Д.
Для 3D необходимо также вектор нормали к эллипсу плоскости – MBo
Также вы можете обратиться к геометрическому Tools/Wild Magic библиотеки в 'https: //www.geometrictools. com/'and book'Геометрические инструменты для Компьютерная графика', чтобы найти эффективные подходы – MBo
Да, я забыл. Отредактировано;) – cronvel