тових формул, так і з розробкою алгоритму власними силами. Придбані вміння безумовно будуть корисні мені, як студенту напрямки інформатики.
Список використаних джерел
Вікіпедія - # justify gt; Додаток А. Повний лістинг програми
# include lt; iostream gt;
# include lt; cmath gt;
# include lt; vector gt; namespace std; Shape//загальний клас фігур
{
public: Perimeter, Square, CenterX, CenterY, Angle;// загальні параметри для всіх фігур type;// тип фігури
//віртуальні функції:
virtual void Move (float X, float Y)=0; void Resize (float X, float Y)=0; void Rotate (float Kangle)=0; void FindSquare ()=0; void FindPerimeter ()=0;
}; Rectangle: public Shape//прямокутник
{: LTX, LTY, LDX, LDY, RDX, RDY, RTX, RTY;// координати кутів () {}; (float KLTX, float KLTY, float KRDX, float KRDY)//конструктор
{= 2;// задаємо тип фігури
LTX=KLTX;// копіюємо координати=KLTY;=KRDX;=KRDY;=LTX;=RDY;=RDX;=LTY;=(RDX-LDX) /2.0+LDX;// знаходимо координати центру
CenterY=(LTY-LDY) /2.0+LDY;
} Move (float X, float Y)//перемістити на X, Y
{
//просто зрушимо всі координати
LTX +=X;
LTY +=Y; +=X; +=Y; +=X; +=Y; +=X; +=Y; +=X; +=Y;
} Resize (float X, float Y)//змінити розмір
{XP=cos (Angle) * Y * 1.0;// знаходимо вектор-зрушення точки для шіріниYP=sin (Angle) * Y * 1.0; -=(XP/2.0);// і свдігаем
LDX -=(XP/2.0);
RTX +=(XP/2.0); +=(XP/2.0); +=(YP/2.0);=(YP/2.0); +=(YP/2.0);=(YP/2.0); XQ=sin (Angle) * X * 1.0;// знаходимо вектор-зрушення точки для довжини
float YQ=cos (Angle) * X * 1.0; +=(XQ/2.0);// і свдігаем
LDX -=(XQ/2.0);
RTX +=(XQ/2.0);
RDX -=(XQ/2.0);
LTY +=(YQ/2.0);
RTY +=(YQ/2.0);=(YQ/2.0);=(YQ/2.0);
} Rotate (float Kangle)//поворот
{angle=-Kangle * 3.14/180;// переклад з градусів в радіани
//запам'ятовуємо початкові значення, тому вони будуть змінюватися в ході обчислень, а для кожного наступного обчислення потрібні первісні дані
float KLTX=LTX; KLTY=LTY; KLDX=LDX; KLDY=LDY; KRTX=RTX; KRTY=RTY; KRDX=RDX; KRDY=RDY;
LTX=CenterX + (KLTX-CenterX) * cos (angle) - (KLTY-CenterY) * sin (angle);=CenterY + (KLTX-CenterX) * sin (angle) + (KLTY-CenterY ) * cos (angle); =CenterX + (KRTX-CenterX) * cos (angle) - (KRTY-CenterY) * sin (angle);=CenterY + (KRTX-CenterX) * sin (angle) + (KRTY-CenterY) * cos (angle); =CenterX + (KLDX-CenterX) * cos (angle) - (KLDY-CenterY) * sin (angle);=CenterY + (KLDX-CenterX) * sin (angle) + (KLDY-CenterY) * cos (angle); =CenterX + (KRDX-CenterX) * cos (angle) - (KRDY-CenterY) * sin (angle);=CenterY + (KRDX-CenterX) * sin (angle) + (KRDY-CenterY) * cos (angle); =angle;
} FindSquare ()//знаходимо площа
{=sqrt(pow((RTX-LTX),2)+pow((RTY-LTY),2))*sqrt(pow((LDX-LTX),2)+pow((LDY-LTY),2));
} FindPerimeter ()//і периметр
{=(sqrt(pow((RTX-LTX),2)+pow((RTY-LTY),2))+sqrt(pow((LDX-LTX),2)+pow((LDY-LTY),2)))*2;
}
}; Quadrate: public Rectangle//квадрат
{: side;// сторона (float KLTX, float KLTY, float Side)//конструктор
{
Rectangle ();//викликаємо конструктор супер-класу
type=3;// вказуємо тип
side=Side;// копіюємо параметри
LTX=KLTX;
LTY=KLTY;
RDX=KLTX + Side;// і обчислюємо бракуючі
RDY=KLTY-Side;=LTX;=RDY;=RDX;=LTY;=(RDX-LDX) /2.0+LDX;// обчислюємо центр=(LTY-LDY) /2.0+LDY;
} Resize (float X)
{XP=cos(Angle)*X*1.0;YP=sin(Angle)*X*1.0;=(XP/2.0);=(XP/2.0);+=(XP/2.0);+=(XP/2.0);+=(YP/2.0);=(YP/2.0);+=(YP/2.0);=(YP/2.0);XQ=sin(Angle)*X*1.0;YQ=cos(Angle)*X*1.0;+=(XQ/2.0);=(XQ/2.0);+=(XQ/2.0);=(XQ/2.0);+=(YQ/2.0);+=(YQ/2.0);=(YQ/2.0);=(YQ/2.0);+=X;
} Rotate (float Kangle)
{angle=-Kangle * 3.14/180; KLTX=LTX; KLTY=LTY; KLDX=LDX; KLDY=LDY; KRTX=RTX; KRTY=RTY; KRDX=RDX; KRDY=RDY;
LTX=CenterX + (KLTX-CenterX) * cos (angle) - (KLTY-CenterY) * sin (an...