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 :-)
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 :-)
Sam algorytm z punktu matematycznego wyglądałby tak:
Pozdrawiam.
Dzięki za pomoc :-)
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
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.
wielokat mozna tez podzielic na trojkaty o ile jest wypukly i zastosowac funckje
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