Napisałam funkcję wykonującą algorytm triangulacji Delaunay'a metodą Bowyera-Watsona. Funkcja tworzenie_trojkata tworzy mi super trojkat i dziala poprawnie (zwraca super trojkat i jego boki), a funkcja plik wczytuje mi z pliku punkty i zwraca je. Funkcja if_inside zwraca True gdy gdy dany punkt znajduje się w okregu opisanym na danym trojkacie i Flase w przeciwnym wypadku, a funkcja wizualizacja_trojkata wizualizuje mi trojkat za pomoca matplotlib. No i korzystam z klasy trojkat zawierajacej trzy elementy, czyli punkty A, B i C. Co jest nie tak z moją funkcją poniżej, że nie wykonuje tego algorytmu poprawnie tylko tworzy mi za duzo przecinajacych sie linii?
def create():
triangle, bok1, bok2, bok3 = tworzenie_trojkata()
punkty = plik()
triangles = []
t1 = trojkat(punkty[0], triangle.A, triangle.B)
t2 = trojkat(punkty[0], triangle.A, triangle.C)
t3 = trojkat(punkty[0], triangle.B, triangle.C)
punkty.pop(0)
print(punkty)
triangles.append(t1)
triangles.append(t2)
triangles.append(t3)
for i in range(len(punkty)-1):
triangles_to_remove = []
triangles_to_add = []
for tr in triangles:
if(if_inside(tr, punkty[i]) == True):
triangles_to_add.append(trojkat(punkty[i], tr.A, tr.B))
triangles_to_add.append(trojkat(punkty[i], tr.A, tr.C))
triangles_to_add.append(trojkat(punkty[i], tr.B, tr.C))
triangles_to_remove.append(tr)
for t in triangles_to_remove:
triangles.remove(t)
for t in triangles_to_add:
triangles.append(t)
for t in triangles:
if(t.A == triangle.A or t.A == triangle.B or t.A == triangle.C
or t.B == triangle.A or t.B == triangle.B or t.B == triangle.C
or t.C == triangle.A or t.C == triangle.B or t.C == triangle.C):
triangles.remove(t)
for t in triangles:
wizualizacja_trojkata(t)
plt.show()