Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К_р_1_Ткач_вар 18.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.5 Mб
Скачать

Создание оконного приложения

Объекты на плоскости: 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 задаются через интерфейс пользователя.

    1. Код программы

//--------------------------------------------------------------

#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();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]