как работает функция getdepth в алгоритме MarchingCube?

Я пытаюсь понять алгоритм марширующего куба, поэтому я думаю, что понял, как формируются треугольники и как вычисляются нормали в каждой сетке. Я вижу, что существует структура связанного списка, которая связывает каждую сетку с другой. Но когда я сталкиваюсь с 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;
}

Похоже, он пытается найти максимальное значение z (правда ли это). Я вижу, что он сравнивает " > ", а потом я его потерял. Может ли кто-нибудь объяснить, что здесь происходит.


person solti    schedule 14.04.2013    source источник


Ответы (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.

person Daryl    schedule 14.04.2013