как работает функция Insert node в Marching Cube?

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

NODE *Insert(NODE *listset, NODE *tmpNode) {
1    NODE *temp;
2
3    if(listset == NULL) return tmpNode;
4    else {
5        tmpNode->next = listset->next;
6        listset->next = tmpNode;
7        return listset;
8    }
9    temp = listset;
10    if(temp->next == NULL) {
11       if(temp->depth > tmpNode->depth) temp->next = tmpNode;
12            else {
13                tmpNode->next = temp;
14                listset = tmpNode;
15            }
16         return listset;
17    }
18    while(temp->next != NULL) {
19        if(temp->next->depth > tmpNode->depth) temp = temp->next;
20        else {
21            tmpNode->next = temp->next;
22            temp->next = tmpNode;
23            return listset;
24        }
25     }
26     temp->next = tmpNode;
27     return listset;

}

В этой функции от 1 до 8 имеет смысл (это просто вставка нового узла в конец). Как код мог достичь этой точки (я имею в виду код с 9 по 27) ?? Это вообще необходимо??

Может кто-нибудь объяснить, что происходит в части 9-27.


person solti    schedule 14.04.2013    source источник
comment
Линия 9 никогда не может быть достигнута. Вы правильно скопировали?   -  person Bryan Olivier    schedule 14.04.2013
comment
Я считаю, что лучшим способом было бы прочитать технический документ по алгоритму Marching Cubes и попытаться реализовать его самостоятельно с нуля. Да, вам придется потратить довольно много времени, но вы получите ценный опыт реализации чего-либо с нуля, просто прочитав спецификацию того, как все должно работать, но не видя точной реализации. Кроме того, взлом такого плохо разработанного кода повредит ваш мозг и ничему вас не научит. Даже если вы распутаете этот код и поймете его, скорее всего, вы забудете его через несколько дней, потому что вы его не создавали сами.   -  person Alexander Shukaev    schedule 14.04.2013
comment
@Bryan - да, это тот же код, я дважды проверил, добавив внутрь функцию printf, и код никогда не достигает этого момента (но кое-как работает)   -  person solti    schedule 14.04.2013
comment
@ Haroogan, что бы ты ни сказал, это грустная правда для ленивого человека;)   -  person solti    schedule 14.04.2013
comment
На самом деле в алгоритме Marching Cubes нет необходимости в функции вставки узла. Вы знаете об этой странице: paulbourke.net/geometry/polygonise? Код на этой странице (прокрутите вниз) работает отлично. Мы построили вокруг него довольно полный набор тестов, все тесты проходят.   -  person coproc    schedule 14.04.2013
comment
Я видел этот веб-сайт, там я смог понять, как формируются треугольники, и да, я не видел там никаких разговоров об узлах. То есть вы имеете в виду, что вместо создания связанного списка узлов мы можем просто пройти через каждую сетку, заполняя сетку точками и значениями, а также вычисляя треугольники, которые проходят через нее??   -  person solti    schedule 14.04.2013