Строим окружность по трем точкам в Blender

Из курса математики мы знаем, что через любые три точки в пространстве можно провести только одну окружность. Пусть у нас есть три точки в сцене Blender, заданные координатами V0 (x0, y0, z0), V1 (x1, y1, z1) и V2 (x2, y2, z2). Давайте разберемся, как мы можем построить окружность, которая проходит через эти три точки.

Пусть любые три точки в пространстве задаются тремя объектами Ico Sphere, размещенными в сцене.

Получим их координаты.

Для того чтобы построить окружность, которая проходит через эти три точки, нам нужно найти два ее параметра: ее центр и ее радиус.

Центр окружности можно рассматривать как центр сферы, на поверхности которой лежат все три изначальные точки. Также все четыре точки (три изначальные точки и центр сферы) должны лежать в одной плоскости.

Мы можем записать систему уравнений для трех сфер, проходящих через три заданные точки, а так же систему уравнений, описывающих принадлежность точек одной плоскости. Решив эту систему уравнений, мы можем найти нужные нам значения центра сферы и ее радиуса.

Пропустим математические преобразования, и сразу перейдем к алгоритму с кодом.

Обратите внимание, что для удобства вычисления коэффициентов уравнения мы определили функцию для получения псевдо-произведения одного вектора на другой _dot(). В результате мы получаем число, равное сумме квадратов соответствующих координат перемножаемых векторов.

Рассчитав таким образом координаты центра окружности и ее радиус, мы теперь можем добавить в сцену окружность – объект Circle. Поместим в точку, где должен располагаться центр окружности, 3D-курсор, и вызовем оператор добавления окружности в сцену.

Окружность находится в нужном месте, однако она все еще не проходит через нужные нам три точки.

Это потому, что окружность всегда добавляется в сцену так, что она располагается горизонтально – в плоскости XY.

Для того чтобы окружность легла на исходные три точки, ее нужно повернуть так, чтобы ее нормаль совпадала с нормалью плоскости, образованной тремя исходными точками. Мы можем сделать это рассчитав матрицу поворота вектора нормали окружности до вектора нормали плоскости трех точек.

Нормаль к плоскости, образованной тремя точками

И нормаль построенной окружности

Воспользовавшись одной из функций расчета матрицы поворота из одного вектора в другой, мы получим нужную нам матрицу.

Теперь повернем  построенную окружность при помощи полученной матрицы.

И теперь построенная окружность проходит через все три изначально заданные точки.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии