Триангуляция Делоне не работает в третьем ряду сетки

Я пытаюсь реализовать триангуляцию Делоне с простой сеткой в ​​качестве тестового ввода, и, похоже, она работает до третьей строки, в которой треугольники начинают перекрываться.

Ряды 1 и 2

Строка 1Строка 2

Ряд 3

Строка 3

Финал

Final

Мне трудно понять, что именно вызывает такое поведение. Вот некоторый псевдокод:

for each vertex v
    edgeBuffer = [];
    for each triangle
        if v is in the triangle's circumscribed circle
            for each edge in the triangle
                check if it's already in edgeBuffer
                if not, add it
                otherwise, remove it
            remove triangle
    for each edge in edgeBuffer
        create a new triangle between edge and v

Фактический код:

$("#add").click(function () { // User clicks a button to add the next vertex

    currVertIndex++;
    var v = vertList[currVertIndex];
    var edges = [];

    for (var i = 0; i < triangles.length; i++) {
        if (triangles[i].circc.containsVertex(v)) {
            var nextIndex;
            for (var e = 0; e < 3; e++) {
                nextIndex = (e + 1 == 3) ? 0 : e + 1;
                var newEdge = new Edge(triangles[i].v[e], triangles[i].v[nextIndex]);
                edges = addEdgeIfNew(newEdge, edges);
            }
            triangles.splice(i, 1);
            i--;
        }
    }

    for (var i = 0; i < edges.length; i++) {
        triangles.push(new Triangle(
            edges[i].v[0],
            edges[i].v[1],
            v
        ));
    }

});

Что здесь происходит не так? Скрипка

Редактировать: проблема не в том, что повторяющиеся ребра не удаляются... это был мой предыдущий вопрос. Теперь это исправлено. Вы можете сравнить изображения здесь с изображениями там, чтобы увидеть это.


person idlackage    schedule 15.04.2015    source источник
comment
попробуйте запустить эту скрипту в Chrome, и вы обнаружите, что в JS довольно много ошибок, которые необходимо исправить в первую очередь.   -  person Mike 'Pomax' Kamermans    schedule 16.04.2015


Ответы (1)


Если треугольник перекрывается, то в описанной сфере текущего треугольника есть 4 вершины. Затем вам нужно удалить все 4 вершины.

person Gigamegs    schedule 16.04.2015
comment
Поскольку мне нужны эти вершины, что мне делать с ними после их удаления? Добавлю ли я их позже? - person idlackage; 16.04.2015
comment
@Idlackage: Вы добавите их позже, когда они образуют треугольник с вашей новой точкой? - person Gigamegs; 16.04.2015