Dzielenie wielokąta na trójkąty

0

Mam stworzony kod, ktory rysuje dowolny wielobok na TCanvas i przetrzymuje w tablicy typu TPunkt (Nr: Integer X: Integer, Y: Integer) współrzędne punktów, które budują ten wielobok.

Czy ktoś mógłby mi pomóc w implementacji kodu, który dzieli wielokąt na trójkąty? Próbowałam zarówno metodą clockwise jak i "obcinaniem trójkątów", ale ciagle nie wszystkie wielokąty poddają sie podziałowi, przy niektorych wywala błędy.

0

Triangulacja Delaunay.

0
for i:=2 to n-2 do
       begin
       point_p := TPunkt.Create;
       point_r := TPunkt.Create;
       point_q := TPunkt.Create;
       point_p := stos2.get(i-2+licznik);
       point_r := stos2.get(i-1+licznik);

       if (i=n) then
         point_q := stos2.get(0)
       else
         point_q := stos2.get(i+licznik);

       wyznacznik := ((point_p.X*point_q.Y)+(point_p.Y*point_r.X)+(point_q.X*point_r.Y))-((point_q.Y*point_r.X)+(point_p.X*point_r.Y)+(point_q.X*point_p.Y)); 

Fragment pewnej pętli algorytmu. Dla ostatniej iteracji (i=4, bo wczytuję wielobok o n=6 wierzchołkach) ciągle wyskakuje mi błąd SIGSEGV w linijce 'wyznacznik'. Nie mam pojęcia dlaczego, tak jakby nie było przydzielonej pamięci, a jest..

1

No odwołujesz się pewnie do nieistniejącego elementu stosu.
Debugger w łapkę i potwierdź.

0

Ale to mozliwe zeby element stos(0) nie istnial pomimo ze są elementy stos(1) i stos(2) ? Bo teraz widze ze wywala mi w momencie wywolywania elementu stos(0), a elementy stos(1) i stos(2) zwraca normalnie :P

2

No skąd mogę to wiedzieć, nie widzę przecież kodu stosu.
Plus może nie tyle nie istnieć, co wskazywać na nieistniejący element.

0

Dobra już widze błąd, ach ta moja durna pała :Pdzieki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1