Я пытаюсь реализовать триангуляцию Делоне с простой сеткой в качестве тестового ввода, и, похоже, она работает до третьей строки, в которой треугольники начинают перекрываться.
Ряды 1 и 2
Ряд 3
Финал
Мне трудно понять, что именно вызывает такое поведение. Вот некоторый псевдокод:
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
));
}
});
Что здесь происходит не так? Скрипка
Редактировать: проблема не в том, что повторяющиеся ребра не удаляются... это был мой предыдущий вопрос. Теперь это исправлено. Вы можете сравнить изображения здесь с изображениями там, чтобы увидеть это.