[Algorytm] Położenie punktu wzgl. tórjkąta

0

Witam,

szukam algorymtmu (o ile taki istnieje), który bada czy punkt o współrzędnych (x, y), należy do trójkąta a wierzchołkach w punktach A, B, C.

Dzięki, za wszelkie sugestie :-)

0

Sam algorytm z punktu matematycznego wyglądałby tak:

  1. Liczysz równania prostych AB,BC,CA,
  2. W zależności od znaku kąta między każdą parą ustalasz czy trojkąt znajduje się pod czy nad prostą,
  3. Otrzymujesz układ równań do ktorego wstawiasz interesujący Cię punkt.
  4. Sprawdzasz czy ten punkt spełnia dany układ i tyle ;).

Pozdrawiam.

0

Dzięki za pomoc :-)

0

function n2disPointinTriangle(P, P1, P2, P3: TextPoint): Boolean;
var
t1, t2, t3: single;
begin
t1 := (P3.Y-P1.Y)(P.X-P1.X) - (P3.X-P1.X)(P.Y-P1.Y);
t2 := (P2.Y-P3.Y)(P.X-P3.X) - (P2.X-P3.X)(P.Y-P3.Y);
t3 := (P1.Y-P2.Y)(P.X-P2.X) - (P1.X-P2.X)(P.Y-P2.Y);
if ((t1>0)and(t2>0)and(t3>0))or((t1<0)and(t2<0)and(t3<0)) then
Result := True
else
Result := False;
end;

textpoint to x i y pq albo dryobates to napisal nie wiem x_X

0

wyznaczanie współczynnika kierunkowego prostej jest dosyć głupim pomysłem - pojawia sie błąd zaokrąglenia, znacznie lepszy to wykorzystanie wyznacznika macierzy 3 stopnia-post wyżej. dzięki niemu możesz określić czy dany punkt leży po lewej, czy po prawej stronie odcinka AB, a może jest współliniowy - wystarczy zbadać znak wyznacznika.

PS: Proponuje też zbadać szerszy problem: przynależności punktu do wielokąta - w skrócie:
prowadzimy prostą w dowolnym kierunku i sprawdzamy ile razy przecina on krawędzie wielokątu - jeżeli jest to liczba parzysta to punkt leży poza wielokątem, a jeśli nie to w wielokącie-uwaga na szczególne przypadki.

0

wielokat mozna tez podzielic na trojkaty o ile jest wypukly i zastosowac funckje

0

Widze, że temat się rozwinął :)

Dzięki za wskazówki, ale już napisałem tego progsa :P
Mimo wszystko dziękuję za zainteresowanie tym tematem :)

Pozdrawiam

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