#pragma once
namespace Guschin {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
// 20 x 30
float clown[] = {
//
8.f, 29.f, 12.f, 29.f,
12.f, 29.f, 13.f, 28.f,
13.f, 28.f, 14.f, 26.f,
14.f, 26.f, 13.f, 24.f,
13.f, 24.f, 15.f, 23.f,
15.f, 23.f, 15.f, 22.f,
15.f, 22.f, 14.f, 21.f,
14.f, 21.f, 12.f, 22.f,
12.f, 22.f, 8.f, 22.f,
8.f, 22.f, 6.f, 21.f,
6.f, 21.f, 5.f, 22.f,
5.f, 22.f, 5.f, 23.f,
5.f, 23.f, 7.f, 24.f,
7.f, 24.f, 6.f, 26.f,
6.f, 26.f, 7.f, 28.f,
7.f, 28.f, 8.f, 29.f,
14.f, 26.f, 15.f, 26.f,
15.f, 26.f, 16.f, 27.f,
16.f, 27.f, 16.f, 26.f,
16.f, 26.f, 17.f, 25.f,
17.f, 25.f, 16.f, 25.f,
16.f, 25.f, 15.f, 24.f,
15.f, 24.f, 15.f, 25.f,
15.f, 25.f, 14.f, 26.f,
15.f, 25.f, 15.f, 26.f,
15.f, 26.f, 16.f, 26.f,
16.f, 26.f, 16.f, 25.f,
16.f, 25.f, 15.f, 25.f,
15.f, 25.f, 12.f, 23.f,
//
15.f, 22.f, 19.f, 17.f,
19.f, 17.f, 19.f, 15.f,
19.f, 15.f, 18.f, 16.f,
18.f, 16.f, 19.f, 14.f,
19.f, 14.f, 18.f, 13.f,
18.f, 13.f, 17.f, 15.f,
17.f, 15.f, 18.f, 12.f,
18.f, 12.f, 16.f, 10.f,
16.f, 10.f, 15.f, 8.f,
15.f, 8.f, 11.f, 6.f,
11.f, 6.f, 9.f, 6.f,
9.f, 6.f, 5.f, 8.f,
5.f, 8.f, 4.f, 10.f,
4.f, 10.f, 2.f, 12.f,
2.f, 12.f, 3.f, 15.f,
3.f, 15.f, 2.f, 13.f,
2.f, 13.f, 1.f, 14.f,
1.f, 14.f, 2.f, 16.f,
2.f, 16.f, 1.f, 15.f,
1.f, 15.f, 1.f, 17.f,
1.f, 17.f, 5.f, 22.f,
//
7.f, 16.f, 5.f, 17.f,
5.f, 17.f, 5.f, 19.f,
5.f, 19.f, 7.f, 21.f,
7.f, 21.f, 9.f, 21.f,
9.f, 21.f, 10.f, 18.5f,
10.f, 18.5f, 9.f, 16.f,
9.f, 16.f, 7.f, 16.f,
7.f, 16.f, 6.f, 17.f,
6.f, 17.f, 7.f, 19.f,
7.f, 19.f, 8.f, 19.f,
8.f, 19.f, 9.f, 17.f,
9.f, 17.f, 8.f, 16.f,
8.f, 16.f, 8.f, 17.f,
8.f, 17.f, 7.f, 17.f,
7.f, 17.f, 7.f, 16.f,
13.f, 16.f, 15.f, 17.f,
15.f, 17.f, 15.f, 19.f,
15.f, 19.f, 13.f, 21.f,
13.f, 21.f, 11.f, 21.f,
11.f, 21.f, 10.f, 18.5f,
10.f, 18.5f, 11.f, 16.f,
11.f, 16.f, 13.f, 16.f,
13.f, 16.f, 14.f, 17.f,
14.f, 17.f, 13.f, 19.f,
13.f, 19.f, 12.f, 19.f,
12.f, 19.f, 11.f, 17.f,
11.f, 17.f, 12.f, 16.f,
12.f, 16.f, 12.f, 17.f,
12.f, 17.f, 13.f, 17.f,
13.f, 17.f, 13.f, 16.f,
//
9.f, 16.f, 11.f, 16.f,
11.f, 16.f, 13.f, 15.f,
13.f, 15.f, 14.f, 13.f,
14.f, 13.f, 13.f, 12.f,
13.f, 12.f, 10.f, 11.f,
9.f, 16.f, 7.f, 15.f,
7.f, 15.f, 6.f, 13.f,
6.f, 13.f, 7.f, 12.f,
7.f, 12.f, 10.f, 11.f,
//
14.f, 13.f, 15.f, 13.f,
15.f, 13.f, 16.f, 12.f,
16.f, 12.f, 16.f, 11.f,
16.f, 11.f, 13.f, 9.f,
13.f, 9.f, 10.f, 8.f,
6.f, 13.f, 5.f, 13.f,
5.f, 13.f, 4.f, 12.f,
4.f, 12.f, 4.f, 11.f,
4.f, 11.f, 7.f, 9.f,
7.f, 9.f, 10.f, 8.f,
//
14.f, 12.f, 15.f, 11.f,
14.f, 11.f, 13.f, 10.f,
13.f, 10.f, 10.f, 9.f,
6.f, 12.f, 5.f, 11.f,
6.f, 11.f, 7.f, 10.f,
7.f, 10.f, 10.f, 9.f,
//
15.f, 17.f, 16.f, 15.f,
16.f, 15.f, 16.f, 10.f,
5.f, 17.f, 4.f, 15.f,
4.f, 15.f, 4.f, 10.f,
//
10.f, 5.f, 14.f, 1.f,
14.f, 1.f, 14.f, 7.f,
14.f, 7.f, 10.f, 3.f,
12.f, 5.f, 13.f, 5.f,
13.f, 5.f, 13.f, 4.f,
13.f, 4.f, 12.f, 4.f,
12.f, 4.f, 12.f, 5.f,
13.f, 6.f, 14.f, 5.f,
14.f, 4.f, 13.f, 3.f,
13.f, 3.f, 14.f, 2.f,
//
10.f, 3.f, 6.f, 7.f,
6.f, 7.f, 6.f, 1.f,
6.f, 1.f, 10.f, 5.f,
8.f, 3.f, 7.f, 3.f,
7.f, 3.f, 7.f, 4.f,
7.f, 4.f, 8.f, 4.f,
8.f, 4.f, 8.f, 3.f,
7.f, 2.f, 6.f, 3.f,
6.f, 4.f, 7.f, 5.f,
7.f, 5.f, 6.f, 6.f,
};
unsigned int clownSize = sizeof(clown) / sizeof(float);
float clownVx = 20.f;
float clownVy = 30.f;
float rabbit[] = {
// голова
0.5f,3.f,1.f,4.5f, // от левой щеки вверх до уха
1.f,4.5f,0.5f,6.f, // левое ухо слева снизу вверх
0.5f,6.f,0.5f, 7.5f,// левое ухо слева
0.5f, 7.5f,1.f,8.f,// левое ухо верх слева
1.f,8.f,1.5f,8.f,// левое ухо верх середина
1.5f,8.f,2.f,7.5f,// левое ухо верх справа
2.f,7.5f,1.5f, 6.f,// левое ухо справа сверху вниз
1.5f, 6.f,1.5f,4.5f,// левое ухо справа до макушки
1.5f,4.5f,3.f,4.5f,// макушка
3.f,4.5f,3.f,6.f,// правое ухо слева снизу вверх
3.f,6.f,2.5f,7.5f,// правое ухо слева
2.5f,7.5f,3.f,8.f,// правое ухо верх слева
3.f,8.f,3.5f,8.f,// правое ухо верх середина
3.5f,8.f,4.f,7.5f,// правое ухо верх справа
4.f,7.5f,4.f,6.f,// правое ухо сверху вниз
4.f,6.f,3.5f,4.5f,// правое ухо справа
3.5f,4.5f,4.f,3.f,// от правого уха вниз до щеки
4.f,3.f,3.5f,1.5f,// правая скула
3.5f,1.5f,2.5f,1.f,// подбородок справа
2.5f,1.f,2.f,1.f,// подбородок снизу
2.f,1.f,1.f,1.5f,// подбородок слева
1.f,1.5f,0.5f,3.f,// левая скула
// туловище
4.f,3.f,5.5f,3.5f,// спина от головы вправо
5.5f,3.5f,7.f,3.5f,// спина верх
7.f,3.5f,7.5f,2.5f,// спина сверху до хвоста
7.5f,2.5f,8.f,2.5f,// хвост сверху
8.f,2.5f,8.f,2.f,// хвост справа
8.f,2.f,7.5f,2.f,// хвост низ справа налево
7.5f,2.f,7.5f,0.5f,// задняя нога справа сверху вниз
7.5f,0.5f,6.5f,0.5f,// задняя нога низ
6.5f,0.5f,6.5f,1.f,// задняя нога слева
6.5f,1.f,6.f,1.f,// между задних ног
6.f,1.f,6.f,0.5f,// левая задняя нога справа
6.f,0.5f,5.f,0.5f,// левая задняя нога низ
5.f,0.5f,5.f,1.f,// левая задняя нога слева
5.f,1.f,4.f,1.f,// между задними и передними ногами
4.f,1.f,4.f,0.5f,// правая передняя нога справа
4.f,0.5f,3.f,0.5f,// правая передняя нога низ
3.f,0.5f,3.f,1.f,// правая передняя нога слева
3.f,1.f,2.5f,1.f,// между передних ног
2.5f,1.f,2.5f,0.5f,// передняя нога справа
2.5f,0.5f,1.5f,0.5f,// передняя нога низ
1.5f,0.5f,1.5f,1.25f,// передняя нога слева
// левый глаз
1.5f,3.5f,1.5f,3.f,// левый глаз слева сверху вниз
1.5f,3.f,2.f,3.f,// левый глаз низ
2.f, 3.f,2.f,3.5f,// левый глаз справа
2.f,3.5f,1.5f,3.5f,// левый глаз верх
// правый глаз
2.5f,3.5f,2.5f,3.f,// правый глаз слева
2.5f,3.f,3.f, 3.f,// правый глаз снизу
3.f,3.f,3.f,3.5f,// правый глаз справа
3.f,3.5f,2.5f,3.5f,// правый глаз сверху
// ушные раковины
1.f,5.5f,1.f,7.f,// левая ушная раковина
3.5f,5.5f,3.5f,7.f,// правая ушная раковина
// нос
2.f,2.5f,2.5f,2.5f,// нос сверху
2.5f,2.5f,2.25f,2.f,// нос справа
2.25f,2.f,2.f,2.5f// нос слева
};
unsigned int rabbitSize = sizeof(rabbit) / sizeof(float);
float rabbitVx = 8.5f;
float rabbitVy = 8.5f;
///
/// Ñâîäêà äëÿ MyForm
///
public ref class MyForm : public System::Windows::Forms::Form
{
public:
MyForm(void)
{
InitializeComponent();
//
//TODO: äîáàâüòå êîä êîíñòðóêòîðà
//
}
protected:
///
/// Îñâîáîäèòü âñå èñïîëüçóåìûå ðåñóðñû.
///
~MyForm()
{
if (components)
{
delete components;
}
}
private:
///
/// Îáÿçàòåëüíàÿ ïåðåìåííàÿ êîíñòðóêòîðà.
///
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
///
/// Òðåáóåìûé ìåòîä äëÿ ïîääåðæêè êîíñòðóêòîðà — íå èçìåíÿéòå
/// ñîäåðæèìîå ýòîãî ìåòîäà ñ ïîìîùüþ ðåäàêòîðà êîäà.
///
void InitializeComponent(void)
{
this->SuspendLayout();
//
// MyForm
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(553, 557);
this->Name = L"MyForm";
this->Text = L"MyForm";
this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);
this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &MyForm::MyForm_Paint);
this->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &MyForm::MyForm_KeyDown);
this->Resize += gcnew System::EventHandler(this, &MyForm::MyForm_Resize);
this->ResumeLayout(false);
}
#pragma endregion
private: bool keepAspectRatio;
private: bool showClown;
private: float* lines = clown;
private: unsigned int arrayLength = clownSize;
private: float Vx = clownVx;
private: float Vy = clownVy;
private: System::Void MyForm_Resize(System::Object^ sender, System::EventArgs^ e) {
Refresh();
}
private: System::Void MyForm_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
Graphics^ g = e->Graphics;
Pen^ blackPen = gcnew Pen(Color::Black, 2);
float Wx = ClientRectangle.Width;
float Wy = ClientRectangle.Height;
float aspectFig = Vx / Vy;
float aspectForm = Wx / Wy;
float Sx, Sy;
if (keepAspectRatio) {
Sx = Sy = aspectFig < aspectForm ? Wy / Vy : Wx / Vx;
}
else {
Sx = Wx / Vx;
Sy = Wy / Vy;
}
float Ty = Sy * Vy;
for (int i = 0; i < arrayLength; i += 4) {
g->DrawLine(blackPen, Sx * lines[i], Ty - Sy * lines[i + 1],
Sx * lines[i + 2], Ty - Sy * lines[i + 3]);
}
}
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
keepAspectRatio = true;
}
private: System::Void MyForm_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) {
switch (e->KeyCode) {
case Keys::M :
keepAspectRatio = !keepAspectRatio;
break;
case Keys::N :
if (showClown)
{
lines = rabbit;
arrayLength = rabbitSize;
Vx = rabbitVx;
Vy = rabbitVy;
}
else
{
lines = clown;
arrayLength = clownSize;
Vx = clownVx;
Vy = clownVy;
}
showClown = !showClown;
break;
default:
break;
}
Refresh();
}
};
}