У меня есть несколько треугольников в трехмерном пространстве, которые берут начало от 0,0,0 и тянутся к двум точкам p1 = -x0, 0, z0 и p2 = + x0, 0, z0.Это в Unity, так что + z - это передняя ось (т.е. они лежат ровно).Каждый треугольник - это своя сетка, точка поворота - 0,0,0.
Теперь я хотел бы повернуть их (используя Quaternion.LookRotation
) так, чтобы их концы образовывали непрерывный многоугольник, в случае трех треугольников.треугольник, в случае четырех треугольников квадрат и т. д.
Мой подход состоит в том, чтобы рассчитать радиус вогнутости получающегося многоугольника на основе длины каждого треугольника (который равен 2 * x0).Если я теперь вычислю n точек на этом круге (где n - количество треугольников, которые у меня есть), я получу координаты x / y, которые я могу напрямую использовать для правильной установки оси «вверх» каждого треугольника, то есть Quaternion.LookRotation(Vector3.forward, new Vector3(x,y,0))
.Это правильно ориентирует треугольник вокруг оси z, то есть центр по-прежнему находится на 0,0,1.
Однако, и это поставило меня в тупик, мне все еще нужно изменить переднюю ось треугольников так, чтобы онинаклон, чтобы сформировать окончательный многоугольник.Я попытался использовать новый Vector3(x,y,z0)
, который дает почти правильный результат, но приводит к перекрытию по краям.Я подозреваю, что это как-то связано с тем, что вращение треугольников эффективно меняет z0, но я не уверен, как действовать.
Мой вопрос заключается в том, как рассчитать новую прямую ось так, чтобы треугольники правильно совмещались