Я ищу наиболее свернутом уравнения , чтобы найти координаты центра и радиус из тетраэдра circumsphere дал четыре 3D очки.
То, что я нашел в Интернете, в основном имеет дело с окружностью плоского трехмерного треугольника, или с некоторыми грубыми математическими определениями, или с каким-то очень единичным случаем, таким как правильные тетраэдры. В любом случае мне удалось найти уравнение ниже, но я что-то пропустил:
-> -> ->
let d1, d2, and d3 three vectors of any face of the triangle :
| d1x d1y d1z | | x | | d1^2 |
2 * | d2x d2y d2z | * | y | = | d2^2 |
| d3x d3y d3z | | z | | d3^2 |
Мои знания в этой области имеют свои пределы, но я думаю, что могу справиться с матрицами и векторными операциями. Но является ли правая часть уравнения квадратом нормы каждого вектора? (которые в векторе). Уравнение действительно? Это просто писатель, который лениво забыл написать | d1 | ^ 2? Или это распространенный способ определения некоторого математического свойства.
PS: это для реализации триангуляции Делоне. Уравнение (номер 9) находится по следующей ссылке: https://www2.mps.mpg.de/homes/daly/CSDS/t4h/tetra.htm
Ответы:
Хотя это древняя нить, я подумал, что для потомков было бы неплохо немного упомянуть. Источник формулы взят из « Геометрических инструментов для компьютерной графики » Филиппа Шнайдера и Дэвида Х. Эберли. Что-то отметить, согласно тексту
Как я понимаю, изоморфизм может иметь несколько различных значений при использовании в геометрии. Если он имеет в виду изоморфность в отношении теории графов, то следующий код должен вести себя корректно, поскольку топология любого тетраэдра одинакова (K4, полный граф). Я проверил результаты функции против альфа-вольфрама, используя различные перестановки в упорядочении канонических вершин, и я не увидел различий в результате. Если упорядочение оказывается проблемой, я предлагаю исследовать нормаль треугольника, образованного вершинами V1, V2, V3 при вводе в эту функцию, и обрабатывать точки как полупространство с помощью теста с точечным произведением, чтобы выяснить если этот треугольник направлен в правильном направлении. Если это не так, простой
std::swap
из любых двух вершин треугольника обратное направление нормали, и вы можете продолжить. Но, как я уже сказал, я не видел разницы с различными перестановками.Вот переведенный код без использования матриц, чтобы избежать путаницы в реализации, это довольно просто;
источник