Как работает функция 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.

Другие вопросы по тегам