Скачиваний:
14
Добавлен:
28.06.2014
Размер:
3.19 Кб
Скачать
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

struct Tochka
{
int x0;
int y0;
};

int xx, yy;
int x[100], y[100];
int n=0;
int p[100];
int s=0;

void PaintX (Tochka t1, Tochka t2)
{
 Form1->Image1->Canvas->MoveTo(t1.x0,t1.y0);
 Form1->Image1->Canvas->LineTo(t2.x0,t2.y0);
}

Tochka t[100];

bool GenPer(int p[], int k)
{
 int j, d;  bool result;
 do

 {k--;
 d = p[1];
 for(j=1;j<k+1;j++)
  p[j] = p[j+1];
 p[k+1] = d;
 result = d>k;
 }
 while (result&&k!=1);
return result;
}

void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button,
   TShiftState Shift, int X, int Y)
{
 xx=X;
 yy=Y;
}

void __fastcall TForm1::Image1Click(TObject *Sender)
{
n++;
int nn = n;
Form1->Image1->Canvas->Ellipse(xx-8,yy-8,xx+8,yy+8);
Form1->Image1->Canvas->TextOutA(xx-3,yy-7,IntToStr(nn));
x[nn]=xx;
y[nn]=yy;
t[nn].x0 = x[nn];
t[nn].y0 = y[nn];
}
//---------------------------------------------------------------------------



void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Edit1->Text = "";

if (s!=0)
 {
   for(int i=2;i<n;i++)
  {
  Form1->Image1->Canvas->Pen->Color=0xffffff;
  PaintX(t[p[i-1]],t[p[i]]);
  }
  Form1->Image1->Canvas->Pen->Color=0xffffff;
  PaintX(t[p[1]],t[p[n-1]]);
  Form1->Image1->Canvas->Pen->Color=0x000000;
  }

 float mas[100];
 int a, b, j, k;
 bool flag, pr;
 float f, r;
 
 for(j=1;j<n+1;j++)
  p[j] = j;
 do
  {
   flag = GenPer(p,n);
  for(j=1;j<n+1;j++)
    {f = 0;
     pr = true;
     a = p[j];
     if (j<n)
      b = p[j+1];
     else
      b = p[1];
     for(k=1;k<n+1;k++)
      if (p[k]!=a&&p[k]!=b)
       {
        r = (x[b] - x[a])*(y[p[k]] - y[a]) - (y[b] - y[a])*(x[p[k]] - x[a]);
        pr = f*r>=0;   
        if (pr==true)
         f = r;
        else break;
        }
     if (pr==false)
      break;
    }
   }
   while (!pr&&!flag);
if (pr)
 {for (int i=1;i<n+1;i++)
   Edit1->Text = Edit1->Text + IntToStr(p[i])+ " ";
   Form1->Image1->Canvas->Pen->Color=0x0000aa;
   for(int i=2;i<n+1;i++)
  {
  PaintX(t[p[i-1]],t[p[i]]);
  }
  PaintX(t[p[1]],t[p[n]]);
  Form1->Image1->Canvas->Pen->Color=0x000000;
  s++;
  }
else
 {ShowMessage(IntToStr(n)+"-угольник не выпуклый");
  Form1->Image1->Canvas->Rectangle(0,0,Form1->Image1->Width,Form1->Image1->Height);
  n=0;
  s=0;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Form1->Image1->Canvas->Rectangle(0,0,Form1->Image1->Width,Form1->Image1->Height);
 n=0;
 s=0;
 Edit1->Text = "";        
}
//---------------------------------------------------------------------------

Соседние файлы в папке перестановки
  • #
    28.06.20143.74 Кб15Project1.bpr
  • #
    28.06.20141.07 Кб14Project1.cpp
  • #
    28.06.201417.72 Кб14Project1.obj
  • #
    28.06.2014876 б14Project1.res
  • #
    28.06.20142.03 Mб14Project1.tds
  • #
    28.06.20143.19 Кб14Unit1.cpp
  • #
    28.06.201451 б14Unit1.ddp
  • #
    28.06.2014993 б14Unit1.dfm
  • #
    28.06.20141.16 Кб14Unit1.h
  • #
    28.06.201448.35 Кб14Unit1.obj
  • #
    28.06.20143.18 Кб14Unit1.~cpp