Trójkąty

0

umiem podzielic na trojkaty dowolny polygon wypukly, ale mam problem, chcialbym sprawdzic czy punkt znajduje sie w jakims trojkacie na foru mznalazlem

Możesz podzielić wielokąt na trójkąty i sprawdzić czy punkt jest wewnątrz któregoś trójkąta. Jak? Banalka Jest sobie taki wzór na pole trójkąta:

P=1/2 [ (y1-x1)(z2-x2)-(y2-x2)(z1-x1)],
gdzie (x1,x2),(y1,y2),(z1,z2) to odpowiednie wierzchołki.

Teraz liczysz pole całego trójkąta, i pola trzech mniejszych (parami wieszchołki i punkt sprawdzany. Jeżeli suma "małych" pól jest większa od pola "dużego" topunkt jest wewnątrz trójkąta. Fajne

Najlepsze jest to, że wzór na pole nie jest "mocożerny" (tak mi się wydaje)

E predzej wrzodow na dupie dostane niz to zadziala :Y

ja wymyslilem zeby pierw sprawdzac odleglosc punktu od kazdego boku (pod katem 90 stopni) jezeli nie dalo by sie to juz wiadomo ze w tym przypadku nie ma go w trojkacie ale jeszcze mam inne problemy, neich ktos pomoze

albo chociaz pwoei mi jak sprawdzic czy jest mozliwosc przeprowadzenia prostej prostopadlej do boku trojkata przechodzacej przez punkt ten co chce sprawdzic :U

0
  function CzyWew(P, P1, P2, P3: TPoint): Boolean;
  var
    t1, t2, t3: Integer;
  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;
0

:d Danke szyn ;p :d [browar]

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