Jak policzyć pole powierzchni wielokąta wklęsłego (niefo

0

Jak policzyć pole powierzchni wielokąta nieforemnego wklęsłego o n-wierzchołkach i danych współrzędnych wszystkich wierzchołków.

Pomocy!

0

nie wiem czy masz może jakieś doświadczenie jeżeli chodzi o OpenGL'a (raczej nie, bo byś nie pytał), bo sprawa jest prosta...

Więc poktótce, w OpenGL jest mechanizm, który pozwal na rysowanie łańcuchów trójkątów (ang. triangle strip). Polega to na tym, że pierwsze trzy wierzchołki definują trójkąt, a każdy kolejny tworzy trójkąt z dwoma poprzednimi.

I tak podążając tym tropem, musisz policzyć pole każdego trójkąta (jak masz trzy punkty to jest to ciastko z kawką (małą czarną)). Na koniec dodajesz pola i masz pole wielokąta wklęsłego.

Easy ?? Easy.

pozdro Milka

0

Dzięki!!!

Zostałem pouczony na innym forum... już wiem że nie można utrudniać sobie sprawy .... f-cja wygląda następująco :

P:=(X[0]-X[n])*(Y[0]+Y[n])/2;
for i:=0 to n-1 do P:=P+(X[i+1]-X[i])*(Y[i-1]+Y[i])/2;

I gotowe .... sam się zdziwiłem ... bo osobiście próbowałem już z całkami</delphi>

0

Dzięki!!!

Zostałem pouczony na innym forum... już wiem że nie można utrudniać sobie sprawy .... f-cja wygląda następująco :

P:=(X[0]-X[n])*(Y[0]+Y[n])/2;
for i:=0 to n-1 do P:=P+(X[i+1]-X[i])*(Y[i-1]+Y[i])/2;

I gotowe .... sam się zdziwiłem ... bo osobiście próbowałem już z całkami</delphi>

ładnie wygląda :-)

0

Triangulacja... :)

0

...a czy ktoś ma pomysł jak zrobić taki program tylko obiektowo (z wykorzystaniem jakich komponentów?) wzorem gaussa by wprowadzać współrzedne X Y i przypisaniu im odpowiednie indeksy
http://pl.wikipedia.org/wiki/Metoda_analityczna_obliczania_p%C3%B3l

sprawia mi to trudność wiec moze ktoś pomoże ;d;d konsolowo wygląda to tak(kod zódłowy poniżej) a zalezyt mi na obiektowym ... POZDRAWIAM

{$apptype console}
uses
SysUtils;

Var x, y: array [0..21] of Real;
i, d :Integer;
p1, pole :Real;
Begin
Writeln ('Program Oblicza pole powierzchni dowolnego wielokata');
Writeln;
Repeat
Write ('Podaj ilosc wierzcholkow wielokata (3-15) ');
Readln (d);
Writeln;
Writeln ('wprowadz wspolrzedne wierzcholkow');
Writeln;
until (d>2) and (d<=15);
For i:=1 to d do
Begin
Write ('Podaj wspolrzedna X ',i,' = ');
Readln ( x[i] ) ;
Write ('Podaj wspolrzedna Y ',i,' = ');
Readln ( y[i] ) ;
end;
x[0] := x[d];
y[0] := y[d];
x[d+1] := x[1];
y[d+1] := y[1];
// Pole - Obliczanie
p1:=0;
For i:=1 to d do
Begin
p1:= p1+x[i]*(y[i+1]-y[i-1]);
end;
if p1<0 Then p1:=-p1;
pole:=p1/2;
writeln('Pole powierzchni wynosi =',pole:9:1);
Readln;
end.

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