HOME ПРИМЕРЫ THANKS НОВИЧКАМ ДОКИ LINKS JavaScript Mail | |||
| |||
|
Turbo Pascal Examples |
Графика:
xi=Pxi+1-Pxi yi=Pyi+1-Pyi Для N-ой вершины N+1-ая будет, естественно, первой. |
const N=8; type point=record x,y:real; end; var Peaks:array[1..N] of point; i:byte; Q:boolean; T,Z,P:real; x1,y1,x2,y2:real; v1,v2:point; function Sign(r:real):shortint; const eps=0.0000001; begin if (abs(r)<eps) then Sign:=1 else Sign:=Round(r/abs(r)); end; Procedure GetVector(i:byte;var p:point); begin if (i=N) then begin p.x:=Peaks[1].x-Peaks[N].x; p.y:=Peaks[1].y-Peaks[N].y; end else begin p.x:=Peaks[i+1].x-Peaks[i].x; p.y:=Peaks[i+1].y-Peaks[i].y; end; end; begin Peaks[1].x:= 0; Peaks[1].y:= 6; Peaks[2].x:=-4; Peaks[2].y:= 5; Peaks[3].x:=-5; Peaks[3].y:= 2; {Peaks[3].x:=-1; Peaks[3].y:= 1; { невыпуклый } Peaks[4].x:=-5; Peaks[4].y:=-1; Peaks[5].x:=-2; Peaks[5].y:=-4; Peaks[6].x:= 4; Peaks[6].y:=-3; Peaks[7].x:= 6; Peaks[7].y:= 1; Peaks[8].x:= 4; Peaks[8].y:= 5; {Peaks[8].x:= 1; Peaks[8].y:= 1; { невыпуклый } GetVector(N,v1); GetVector(1,v2); T:=v1.x*v2.y-v2.x*v1.y; Z:=Sign(T); P:=1.0; i:=1; Q:=true; while (Q and (i<N)) do begin GetVector(i,v1); GetVector(i+1,v2); T:=v1.x*v2.y-v2.x*v1.y; P:=P*Z*Sign(T); writeln('i=',i,'; T=',T,'; P=',P); if (P<0) then Q:=false; inc(i); end; if Q then writeln('Многоугольник выпуклый.') else writeln('Многоугольник невыпуклый.'); end.             |
HOME |