
Создание оконного приложения
Объекты на плоскости: 1) прямоугольник ABCD со сторонами AB=a, BC=b , сторона AD лежит на оси X, расстояние от точки D до начала координат r.
Реализовать преобразования: 1) поворот на произвольный угол α (в градусах) прямоугольника ABCD относительно M(0,a/2). Положительным является вращение против часовой стрелки относительно наблюдателя (пользователя программы). 2) Масштабирование по осям x, y относительно точки D на значения Sx, Sy.
Значения a,b,r,α, Sx, Sy задаются через интерфейс пользователя.
Код программы
//--------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
#include "figura.h"
//--------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
disp=new Display(0,0,400,400,0.1,0.1,Form1->Image1->Canvas);
}
//--------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Form1->Height=427;Form1->Width=608;
disp->Clear();
fg=new Figura;
fg->Show();
}
//--------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
delete fg;
fg=new Figura;
disp->Clear();
Vector v=Vector(CSpinEdit1->Value,CSpinEdit2->Value,0);
Matrix A=Scale(v);
fg->Transform(A);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="МАСШТАБ";
AboutBox->ShowModal();
v=Vector(CSpinEdit3->Value,0,0);
A=Translate(v);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="СМЕЩЕНИЕ";
AboutBox->ShowModal();
fg->Transform(A);
fg->Show();
}
//--------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
Form1->Height=427;Form1->Width=608;
}
//--------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ double a=(double)CSpinEdit1->Value;
double b=(double)CSpinEdit2->Value;
double r=(double)CSpinEdit3->Value;
double alfa=(double)CSpinEdit4->Value*M_PI/180;
delete fg;
fg=new Figura;
disp->Clear();
Vector v=Vector(a,b,0);
Matrix A=Scale(v);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="МАСШТАБ";
AboutBox->ShowModal();
fg->Transform(A);
v=Vector(r,0,0);
A=Translate(v);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="СМЕЩЕНИЕ";
AboutBox->ShowModal();
fg->Transform(A);
v=Vector(0,b/2,0);
A=Rotate(v,alfa);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="ПОВОРОТ";
AboutBox->ShowModal();
fg->Transform(A);
fg->Show();
}
//--------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
double a=(double)CSpinEdit1->Value;
double b=(double)CSpinEdit2->Value;
double r=(double)CSpinEdit3->Value;
double alfa=(double)CSpinEdit4->Value*M_PI/180;
double x,y;
delete fg;
fg=new Figura;
disp->Clear();
Vector v=Vector(a,b,0);
Matrix A=Scale(v);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="МАСШТАБ";
AboutBox->ShowModal();
fg->Transform(A);
v=Vector(r,0,0);
A=Translate(v);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="СМЕЩЕНИЕ";
AboutBox->ShowModal();
fg->Transform(A);
v=Vector(0,b/2,0);
A=Rotate(v,alfa);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="ПОВОРОТ";
AboutBox->ShowModal();
fg->Transform(A);
x=StrToFloat(Edit1->Text);
y=StrToFloat(Edit2->Text);
v=Vector(x,y,0);
A=Scale(v);
for(int i=0;i<4;i++)
for(int j=0;j<4;j++) StringGrid1->Cells[i][j]=FloatToStr(A.x[i][j]);
AboutBox->Label3->Caption="МАСШТАБ";
AboutBox->ShowModal();
fg->Transform(A);
fg->Show();
}