Модифицирование программы для определения класса, реализующего понятие геометрической фигуры в графической системе (Лабораторная работа № 2), страница 3

{fatline=fl;

 typeline=tl;

 colorline=cl;

 typefill=tf;

 colorfill=cf;

}

//-----------------Move-----------------------------------------

void Romb::move(int rx, int ry)

{int i;

 for (i=0;i<10;i++)

 {x[i]=x[i]+rx;

  y[i]=y[i]+ry;

 }

}

----------------------------------------------------------------------------------------------------

Файл main.cpp

----------------------------------------------------------------------------------------------------

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include "clasromb.cpp"

Romb R;

//--------------Check locatoin on display------------------------

int check1()

{int i,x[9], y[9],n=4;

 for (i=1; i<17; i++)

 {if (i<9) x[i]=R.Getxy(i);

     else y[i-8]=R.Getxy(i);

 }

 if (0>=x[1+n] || x[3+n]>=getmaxx() || 0>=y[2+n] || y[4+n]>=getmaxy())

      return 1;

 else return 0;

}

//--------------Check nesting 1 in 2-----------------------------

int check2()

{float S, S1=0, a,b,c,p;

 int   i,j, flag;

 int x[9], y[9],llx,lly;

 for (i=1; i<17; i++)

 {if (i==9) printf ("\n");

  if (i<9) x[i]=R.Getxy(i);

     else  y[i-8]=R.Getxy(i);

 }

 llx=R.Get(8);

 lly=R.Get(9);

 S=llx*lly*2;

 flag=0;

//--------------Squares comparison-------------------------------

for (j=1;j<5;j++)

{for (i=5;i<9;i++)

 {if (i<8)

  {a=sqrt(pow((x[i]-x[i+1]),2)+pow((y[i]-y[i+1]),2));

   b=sqrt(pow((x[i]-x[j]),2)+pow((y[i]-y[j]),2));

   c=sqrt(pow((x[i+1]-x[j]),2)+pow((y[i+1]-y[j]),2));

  }

  else

  {a=sqrt(pow((x[5]-x[8]),2)+pow((y[5]-y[8]),2));

   b=sqrt(pow((x[5]-x[j]),2)+pow((y[5]-y[j]),2));

   c=sqrt(pow((x[8]-x[j]),2)+pow((y[8]-y[j]),2));

  }

  p=(a+b+c)/2;

  S1=S1+sqrt(p*(p-a)*(p-b)*(p-c));

 }

 if (fabs(S1-S)>100) flag=1;

 S1=0;

 }

return flag;

}

//----------------------------Like Set()------------------

void enter()

{int xo,yo,xoo,yoo,dx1,dx2,dy1,dy2,angle1,angle2,f,c,k;

 clrscr();

 do{

 printf ("Vvedite X0,Y0,diagX,diagY,ugol naklona vnutrennego romba\n");

 scanf ("%d%d%d%d%d",&xo,&yo,&dx1,&dy1,&angle1);

 printf ("Vvedite X0,Y0,diagX,diagY,ugol naklona vneshnego romba\n");

 scanf ("%d%d%d%d%d",&xoo,&yoo,&dx2,&dy2,&angle2);

 R.enter(xo, yo, dx1, dy1, angle1, xoo, yoo, dx2, dy2, angle2);

 c=check1();

 if (c) printf("error: za ekran\n");

 k=check2();

 if (k) printf("error: ne vlozhenny\n\n");

 }while (c==1 || k==1);

}

//---------Graphic options-----------------------

void Goptions()

{int i, fl,tl,cl,tf,cf;

 fl=R.Get(11);

 tl=R.Get(12);

 cl=R.Get(13);

 tf=R.Get(14);

 cf=R.Get(15);

 do{

 clrscr();

 printf ("LINE:\n 1 - Fat (1 or 3)\n 2 - Type\n 3 - Color\n\nFILL:\n 4 - Type\n 5 - Color\n\n 0 - Back\n");

 scanf ("%d",&i);

 switch (i)

 {case 1: clrscr();printf ("1 or 3\n\n");

           scanf ("%d",&fl); break;

  case 2: clrscr();printf ("0 - Solid line\n1 - Dotted line\n2 - Center line\n3 - Dashed line\n\n");

           scanf ("%d",&tl); break;

  case 3: clrscr();printf ("1 - Blue\n2 - Green\n3 - Gray\n4 - Red\n5 - Magenta\n6 - Brown\n7 - LightGray\n8 - DarkGray\n9 - LightBlue\n10 - LightGreen\n11 - LightCyan\n12 - LightRed\n13 - LightMagenta\n14 - Yellow\n15 - White\n\n");

           scanf ("%d",&cl); break;

  case 4: clrscr();printf ("1 -- Solid fill\n2 -- Line fill -- ||\n3 -- LtSlash -- //\n4 -- Slash -- ///\n5 -- BkSlash -- \\\ \n6 -- LtBkSlash -- \\ \n7 -- Hatch fill -- +\n8 -- XHatch fill -- x\n9 -- InterLeave fill\n10 - Wide Dot fill - ..\n11 - Close Dot fill - ::\n\n");