.


:




:

































 

 

 

 


1




Builder. Canvas

 

 

ճ

1

: : Unit1.cpp Ris.cpp, Project1.bpr Malunok. bpr.

Panel ( Standard) Edit ( Standard), Button ( Standard), SpeedButton ( Additional) Label ( Standard).

. 1:

. 1.

:

 

Name
Form1 MainForm Caption 3D Rotation
    Height  
    Width  
    KeyPreview true
Panel1 Panel1 Caption  
    Align alLeft
    Width  
Button1 Button1 Caption DRAW
SpeedButton1 SBxccw Caption <
SpeedButton2 SBxcw Caption >
SpeedButton3 SByccw Caption <
SpeedButton4 SBycw Caption >
SpeedButton5 SBzcw Caption <
SpeedButton6 SBzcw Caption >
Label1 Label1 Caption Size:
Label2 Label2 Caption X:
Label3 Label3 Caption Y:
Label4 Label4 Caption Z:
Edit1 edSize Text  

. . 2:

. 2.

 

Ris.h , , : //---------------------------------------------------------

const float cw = 1 * 3.1415926535 / 180;

const float ccw = -cw;

struct tpointr { float x, y, z; };

class TMainForm: public TForm

{

__published: // IDE-managed Components

private: // User declarations

void __fastcall myline(float x1, float y1, float z1, float x2, float y2, float z2);

void __fastcall Draw_Cube(void);

void __fastcall Rotate(float rad,AnsiString coord);

tpointr box[9];

public: // User declarations

__fastcall TMainForm(TComponent* Owner);

};

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

Ris.cpp #include <math.h> : //----------------------------------------------------------

void __fastcall TMainForm::myline(float x1, float y1, float z1, float x2, float y2, float z2)

{

Canvas->MoveTo(floor(x1) + ClientWidth / 2 + Panel1->Width / 2, floor(y1) + ClientHeight / 2);

Canvas->LineTo(floor(x2) + ClientWidth / 2 + Panel1->Width / 2, floor(y2) + ClientHeight / 2);

}

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

void __fastcall TMainForm::Draw_Cube(void)

{

int i, j=3;

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

{

myline(box[j].x, box[j].y, box[j].z, box[i].x, box[i].y, box[i].z);

myline(box[j+4].x, box[j+4].y, box[j+4].z, box[i+4].x, box[i+4].y, box[i+4].z);

myline(box[i].x, box[i].y, box[i].z, box[i+4].x, box[i+4].y, box[i+4].z);

j=i;

}

myline(box[0].x, box[0].y, box[0].z, box[5].x, box[5].y, box[5].z);

myline(box[1].x, box[1].y, box[1].z, box[4].x, box[4].y, box[4].z);

}

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

void __fastcall TMainForm::Rotate(float rad,AnsiString coord)

{

Canvas->Pen->Color=clBtnFace;

Draw_Cube();

for (int i=0; i<9; i++)

{

if (coord == "x")

{

box[i].y = box[i].y * cos(rad) + box[i].z * sin(rad);

box[i].z = -box[i].y * sin(rad) + box[i].z * cos(rad);

}

if (coord == "y")

{

box[i].x = box[i].x * cos(rad) + box[i].z * sin(rad);

box[i].z = -box[i].x * sin(rad) + box[i].z * cos(rad);

}

if (coord == "z")

{

box[i].x = box[i].x * cos(rad) + box[i].y * sin(rad);

box[i].y = -box[i].x * sin(rad) + box[i].y * cos(rad);

}

}

Canvas->Pen->Color=clRed;

Draw_Cube();

}

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

Button1 䳿 OnClick: //--------------------------------------------------------

void __fastcall TMainForm::Button1Click(TObject *Sender)

{

int size;

size = StrToInt(edSize->Text);

Canvas->Pen->Color=clBtnFace;

Draw_Cube();

box[0].x = -size; box[0].y = -size; box[0].z = -size;

box[1].x = size; box[1].y = -size; box[1].z = -size;

box[2].x = size; box[2].y = size; box[2].z = -size;

box[3].x = -size; box[3].y = size; box[3].z = -size;

box[4].x = -size; box[4].y = -size; box[4].z = size;

box[5].x = size; box[5].y = -size; box[5].z = size;

box[6].x = size; box[6].y = size; box[6].z = size;

box[7].x = -size; box[7].y = size; box[7].z = size;

Canvas->Pen->Color=clRed;

Draw_Cube();

}

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

SBxccw 䳿 OnClick: //---------------------------------------------------------

void __fastcall TMainForm::SBxccwClick(TObject *Sender)

{

Rotate(ccw, "x");

}

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

SBxcw 䳿 OnClick: //--------------------------------------------------------

void __fastcall TMainForm::SBxcwClick(TObject *Sender)

{

Rotate(cw, "x");

}

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

SByccw 䳿 OnClick: //--------------------------------------------------------

void __fastcall TMainForm::SByccwClick(TObject *Sender)

{

Rotate(ccw, "y");

}

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

SBycw 䳿 OnClick: //--------------------------------------------------------

void __fastcall TMainForm::SBycwClick(TObject *Sender)

{

Rotate(cw, "y");

}

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

SBzccw 䳿 OnClick: //--------------------------------------------------------

void __fastcall TMainForm::SBzccwClick(TObject *Sender)

{

Rotate(ccw, "z");

}

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

SBzcw 䳿 OnClick: //---------------------------------------------------------

void __fastcall TMainForm::SBzcwClick(TObject *Sender)

{

Rotate(cw, "z");

}

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

MainForm 䳿 OnKeyDown: //-----------------------------------------------------

void __fastcall TMainForm::FormKeyDown (TObject *Sender, WORD &Key, TShiftState Shift)

{

switch (Key){

case VK_NUMPAD1:

Rotate(ccw, "z");

SBzccw->GroupIndex=666;

SBzccw->Down=true; break;

case VK_NUMPAD2:

Rotate(cw, "z");

SBzcw->GroupIndex=666;

SBzcw->Down=true; break;

case VK_NUMPAD4:

Rotate(ccw, "y");

SByccw->GroupIndex=666;

SByccw->Down=true; break;

case VK_NUMPAD5:

Rotate(cw, "y");

SBycw->GroupIndex=666;

SBycw->Down=true; break;

case VK_NUMPAD7:

Rotate(ccw, "x");

SBxccw->GroupIndex=666;

SBxccw->Down=true; break;

case VK_NUMPAD8:

Rotate(cw, "x");

SBxcw->GroupIndex=666;

SBxcw->Down=true; break;

}

}

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

MainForm 䳿 OnKeyUp: //--------------------------------------------------

void __fastcall TMainForm::FormKeyUp (TObject *Sender, WORD &Key, TShiftState Shift)

{

SBxccw->GroupIndex=0;

SBxcw->GroupIndex=0;

SByccw->GroupIndex=0;

SBycw->GroupIndex=0;

SBzccw->GroupIndex=0;

SBzcw->GroupIndex=0;

SBxccw->Down=false;

SBxcw->Down=false;

SByccw->Down=false;

SBycw->Down=false;

SBzccw->Down=false;

SBzcw->Down=false;

}

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

.

. ³ . 3:

. 3.





:


: 2015-10-01; !; : 367 |


:

:

,
==> ...

1892 - | 1807 -


© 2015-2024 lektsii.org - -

: 0.019 .