Как работает функция getdepth в алгоритме MarchingCube?
Я пытаюсь понять алгоритм Marching Cube, поэтому, я думаю, я понял, как формируются треугольники и как вычисляются нормали в каждой сетке. Я вижу, что существует структура типа связанного списка, которая связывает каждую сетку с другой. Но когда я сталкиваюсь с GetDepth(t[m]), который проходит каждый треугольник (эти треугольники каждой сетки) (t[0],..,..) по отдельности, он возвращает глубину узла.
Функция,
float GetDepth(TRIANGLE t) {
float z;
z = t.p[0].z;
z = t.p[1].z > z? t.p[1].z: z;
z = t.p[2].z > z? t.p[2].z: z;
return z;
}
Похоже, он пытается найти max z(это правда). Я вижу, что он сравнивает " > ", а потом я потерял его. Может ли кто-нибудь объяснить, пожалуйста, что здесь происходит.
1 ответ
Решение
Казалось бы, вы незнакомы с? как троичный оператор. Код, который вы разместили, эквивалентен следующему:
float GetDepth(TRIANGLE t) {
float z;
z = t.p[0].z;
if (t.p[1].z > z) {z = t.p[1].z;} else {z = z;}
if (t.p[2].z > z) {z = t.p[2].z;} else {z = z;}
return z;
}
И да, это находит максимальное значение z в массиве p.