#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; public ref class MyForm : public System::Windows::Forms::Form { public: MyForm(void) { InitializeComponent(); } 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(); } }; }