| GrimmJow |
19.05.2010 21:54 |
Цитата:
Четырехугольник называется выпуклым, если он расположен в одной полуплоскости относительно прямой, содержащей любую его сторону.
|
Код:
void main ()
{
float x1,y1,x2,y2,x3,y3,x4,y4;
cout << "\n введите значение X1";
cin >> x1;
cout << "\n введите значение Y1";
cin >> y1;
cout << "\n";
cout << "\n введите значение X2";
cin >> x2;
cout << "\n введите значение Y2";
cin >> y2;
cout << "\n";
cout << "\n введите значение X3";
cin >> x3;
cout << "\n введите значение Y3";
cin >> y3;
cout << "\n";
cout << "\n введите значение X4";
cin >> x4;
cout << "\n введите значение Y4";
cin >> 4;
cout << "\n";
//если угол >180, знач НЕвыпуклый. Угол определить сможешь?
return 0
}
Есть такое на паскале решенное. Посмотри, может по аналогии сделаешь :D
Код:
uses crt;
function angle(x1,y1,x2,y2:integer):real;
var
dx,dy:integer;
r:real;
begin
dx:=x2-x1;
dy:=y2-y1;
r:=sqrt(dx*dx+dy*dy);
if dy>=0 then
begin
if dx=0 then angle:=pi/2;
if dx>0 then angle:=abs(arctan(dy/dx));
if dx<0 then angle:=pi-abs(arctan(dy/dx));
end;
if dy<0 then
begin
if dx=0 then angle:=3*pi/2;
if dx>0 then angle:=2*pi-abs(arctan(dy/dx));
if dx<0 then angle:=pi+abs(arctan(dy/dx));
end;
end;
var
i,i1,k:integer;
a1,a2:real;
key:boolean;
begin
clrscr;
write('kol='); readln(k);
for i:=1 to k do
begin
write('Введите координаты x и y vershiny v[',i,']:');
readln(v[i,1],v[i,2]);
end;
key:=true;
for i:=2 to k do
begin
if i=k then i1:=1 else i1:=i+1;
a1:=angle(v[i-1,1],v[i-1,2],v[i,1],v[i,2]);
a2:=angle(v[i,1],v[i,2],v[i1,1],v[i1,2]);
if (((a2-a1)<0)and((a2-a1)>-pi)) or ((a2-a1)>pi) then
begin
key:=false;
break;
end;
end;
a1:=angle(v[k,1],v[k,2],v[1,1],v[1,2]);
a2:=angle(v[1,1],v[1,2],v[2,1],v[2,2]);
if (((a2-a1)<0)and((a2-a1)>-pi)) or ((a2-a1)>pi) then key:=false;
if key=true then writeln('Выпуклый') else writeln('Вогнутый');
readkey;
end.
|