Показать сообщение отдельно

  #10  
Старый 19.05.2010, 21:54
GrimmJow
Познающий
Регистрация: 24.11.2007
Сообщений: 46
С нами: 9717396

Репутация: 19
По умолчанию

Цитата:
Четырехугольник называется выпуклым, если он расположен в одной полуплоскости относительно прямой, содержащей любую его сторону.


Код:
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
}



Есть такое на паскале решенное. Посмотри, может по аналогии сделаешь

Код:
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.
 
Ответить с цитированием