Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // глобальный массивы вещественных чисел,
- // в котором хранятся координаты точек
- // ЗАЯЦ
- float lines1[] = {
- // голова
- 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 // нос слева
- };
- // МУХОМОР
- float lines2[] = {
- // ножка гриба
- 10.f, 1.f, 12.f, 2.f, // ножка гриба снизу справа
- 12.f, 2.f, 13.f, 4.f, // ножка гриба справа
- 13.f, 4.f, 12.f, 9.f, // ножка гриба справа (выше)
- 12.f, 9.f, 13.f, 12.f, // ножка гриба сверху справа
- 13.f, 12.f, 11.f, 13.f, // ножка гриба сверху
- 11.f, 13.f, 9.f, 13.f, // ножка гриба сверху по центру
- 9.f, 13.f, 7.f, 12.f, // ножка гриба сверху
- 7.f, 12.f, 8.f, 9.f, // ножка гриба сверху слева
- 8.f, 9.f, 7.f, 4.f, // ножка гриба слева
- 7.f, 4.f, 8.f, 2.f, // ножка гриба слева (ниже)
- 8.f, 2.f, 10.f, 1.f, // ножка гриба снизу слева
- // шапка гриба (внешняя часть)
- 12.f, 9.f, 14.f, 9.f, // горизонтальная линия снизу справа
- 14.f, 9.f, 17.f, 10.f, // диагональная линия снизу справа
- 17.f, 10.f, 19.f, 12.f, // диагональная линия справа
- 19.f, 12.f, 19.f, 15.f, // вертикальная линия справа
- 19.f, 15.f, 17.f, 17.f, // диагональная линия справа
- 17.f, 17.f, 12.f, 28.f, // большая диагональная линия справа
- 12.f, 28.f, 11.f, 29.f, // маленькая диагональная линия сверху справа
- 11.f, 29.f, 9.f, 29.f, // горизонтальная линия сверху по центру
- 9.f, 29.f, 8.f, 28.f, // маленькая диагональная линия сверху слева
- 8.f, 28.f, 3.f, 17.f, // большая диагональная линия слева
- 3.f, 17.f, 1.f, 15.f, // диагональная линия слева
- 1.f, 15.f, 1.f, 12.f, // вертикальная линия слева
- 1.f, 12.f, 3.f, 10.f, // диагональная линия слева
- 3.f, 10.f, 6.f, 9.f, // диагональная линия снизу слева
- 6.f, 9.f, 8.f, 9.f, // горизонтальная линия снизу слева
- // шапка гриба (внутренняя часть)
- 37.f / 3, 10.f, 14.f, 10.f, // горизонтальная линия снизу справа
- 14.f, 10.f, 16.f, 11.f, // диагональная линия снизу справа
- 16.f, 11.f, 18.f, 13.f, // диагональная линия справа
- 18.f, 13.f, 16.f, 15.f, // диагональная линия справа
- 16.f, 15.f, 13.f, 16.f, // диагональная линия сверху справа
- 13.f, 16.f, 7.f, 16.f, // горизонтальная линия по центру
- 7.f, 16.f, 4.f, 15.f, // диагональная линия сверху слева
- 4.f, 15.f, 2.f, 13.f, // диагональная линия слева
- 2.f, 13.f, 4.f, 11.f, // диагональная линия слева
- 4.f, 11.f, 6.f, 10.f, // диагональная линия снизу слева
- 6.f, 10.f, 23.f / 3, 10.f, // горизонтальная линия снизу слева
- // складки во внутренней части шапки гриба (линии справа налево)
- 13.f, 12.f, 17.f, 14.f, // 1-ая линия
- 12.f, 12.5f, 14.f, 47.f / 3, // 2-ая линия
- 11.f, 13.f, 12.f, 16.f, // 3-яя линия
- 10.f, 13.f, 10.f, 16.f, // 4-ая линия (центральная)
- 9.f, 13.f, 8.f, 16.f, // 5-ая линия
- 8.f, 12.5f, 6.f, 47.f / 3, // 6-ая линия
- 7.f, 12.f, 3.f, 14.f, // 7-ая линия
- // самое верхнее пятно гриба (по часовой стрелке)
- 8.f, 28.f, 9.f, 28.f, // горизонтальная линия сверху
- 9.f, 28.f, 10.f, 27.f, // диагональная линия сверху справа
- 10.f, 27.f, 10.f, 26.f, // вертикальная линия справа
- 10.f, 26.f, 9.f, 25.f, // диагональная линия снизу справа
- 9.f, 25.f, 8.f, 25.f, // горизонтальная линия снизу
- 8.f, 25.f, 7.f, 25.8f, // диагольная линия снизу слева
- // пятно гриба (ниже и правее 1-ого)
- 11.f, 25.f, 12.f, 25.f, // горизонтальная линия сверху
- 12.f, 25.f, 13.f, 24.f, // диагональная линия сверху справа
- 13.f, 24.f, 13.f, 23.f, // вертикальная линия справа
- 13.f, 23.f, 12.f, 22.f, // диагональная линия снизу справа
- 12.f, 22.f, 11.f, 22.f, // горизонтальная линия снизу
- 11.f, 22.f, 10.f, 23.f, // диагональная линия снизу слева
- 10.f, 23.f, 10.f, 24.f, // вертикальная линия слева
- 10.f, 24.f, 11.f, 25.f, // диагональная линия сверху слева
- // пятно гриба (ниже и левее 2-ого)
- 7.f, 22.f, 8.f, 22.f, // горизонтальная линия сверху
- 8.f, 22.f, 9.f, 21.f, // диагональная линия сверху справа
- 9.f, 21.f, 9.f, 20.f, // вертикальная линия справа
- 9.f, 20.f, 8.f, 19.f, // диагональная линия снизу справа
- 8.f, 19.f, 7.f, 19.f, // горизнотальная линия снизу
- 7.f, 19.f, 6.f, 20.f, // диагональная линия снизу слева
- 6.f, 20.f, 6.f, 21.f, // вертикальная линия слева
- 6.f, 21.f, 7.f, 22.f, // диагональная линия сверху слева
- // пятно гриба (ниже и правее 3-его)
- 12.f, 21.f, 14.f, 21.f, // горизонтальная линия сверху
- 14.f, 21.f, 15.f, 20.f, // диагональная линия сверху справа
- 15.f, 20.f, 15.f, 18.f, // вертикальная линия справа
- 15.f, 18.f, 14.f, 17.f, // диагональная линия снизу справа
- 14.f, 17.f, 12.f, 17.f, // горизонтальная линия снизу
- 12.f, 17.f, 11.f, 18.f, // диагональная линия снизу слева
- 11.f, 18.f, 11.f, 20.f, // вертикальная линия слева
- 11.f, 20.f, 12.f, 21.f, // диагональная линия сверху слева
- // пятно гриба (ниже 3-его)
- 7.f, 18.f, 8.f, 18.f, // горизонтальная линия сверху
- 8.f, 18.f, 9.f, 17.f, // диагольная линия сверху справа
- 9.f, 17.f, 8.f, 16.f, // диагональная линия снизу справа
- 7.f, 16.f, 6.f, 17.f, // диагональная линия снизу слева
- 6.f, 17.f, 7.f, 18.f, // диагольная линия сверху слева
- // пятно гриба (левее 5-ого)
- 4.f, 19.2f, 5.f, 18.f, // диагональная линия сверху справа
- 5.f, 18.f, 5.f, 17.f, // вертикальная линия справа
- 5.f, 17.f, 4.f, 16.f, // диагональная линия снизу справа
- 4.f, 16.f, 2.f, 16.f, // горизонтальная линия снизу
- // маленькое пятно гриба слева
- 1.f, 15.f, 2.f, 14.f, // диагональная линия сверху справа
- 2.f, 14.f, 1.f, 13.f, // диагональная линия снизу справа
- // пятно гриба справа
- 17.f, 17.f, 16.f, 16.f, // диагональная линия сверху слева
- 16.f, 16.f, 17.f, 15.f, // диагональаня линия снизу справа
- 17.f, 15.f, 19.f, 15.f, // горизонтальная линия снизу
- // трава слева
- 10.f, 1.f, 4.f, 1.f, // нижняя платформа слева
- 4.f, 1.f, 2.f, 3.f, // диагональная линия снизу слева
- 2.f, 3.f, 5.f, 3.f, // горизонтальная линия
- 5.f, 3.f, 3.f, 5.f, // диагональная линия
- 3.f, 5.f, 5.f, 4.f, // диагональная линия (травинка)
- 5.f, 4.f, 5.f, 6.f, // вертикальная линия
- 5.f, 6.f, 6.f, 4.f, // диагональная линия (травинка)
- 6.f, 4.f, 6.f, 8.f, // вертикальная линия
- 6.f, 8.f, 7.f, 4.f, // диагональная линия (травинка)
- // трава справа
- 10.f, 1.f, 16.f, 1.f, // нижняя платформа справа
- 16.f, 1.f, 18.f, 3.f, // диагональная линия снизу справа
- 18.f, 3.f, 15.f, 3.f, // горизонтальная линия
- 15.f, 3.f, 17.f, 5.f, // диагональная линия
- 17.f, 5.f, 15.f, 4.f, // диагональная линия (травинка)
- 15.f, 4.f, 15.f, 6.f, // вертикальная линия
- 15.f, 6.f, 14.f, 4.f, // диагональная линия (травинка)
- 14.f, 4.f, 14.f, 8.f, // вертикальная линия
- 14.f, 8.f, 13.f, 4.f // диагональная линия (травинка)
- };
- unsigned int arrayLength1 = sizeof(lines1) / sizeof(float);
- unsigned int arrayLength2 = sizeof(lines2) / sizeof(float);
- // размеры рисунка
- float Vx1 = 8.5f; // по горизонтали
- float Vy1 = 8.5f; // по вертикали
- float Vx2 = 20.f; // по горизонтали
- float Vy2 = 30.f; // по вертикали
- // соотношение сторон рисунка
- float aspectFig1 = Vx1 / Vy1;
- float aspectFig2 = Vx2 / Vy2;
- ///...///
- private: bool keepAspectRatio; // значение - сохранять ли соотношения рисунка?
- private: bool typeOfPicture; // true - заяц, false - мухомор
- private: void print(Graphics^ g, Pen^ blackPen, float lines[], unsigned int arrayLength, float Vx, float Vy, float aspectFig, float Wx, float Wy, float aspectForm)
- {
- g->Clear(Color::White);
- float Sx, Sy;
- if (keepAspectRatio) {
- // коэффициенты увеличения при сохранении исходного соотношения сторон
- Sx = Sy = aspectFig1 < aspectForm ? Wy / Vy : Wx / Vx;
- }
- else {
- Sx = Wx / Vx; // коэффициент увеличения по оси Ox
- Sy = Wy / Vy; // коэффициент увеличения по оси Oy
- }
- float Ty = Sy * Vy; // смещение в положительную сторону по оси Oy после смены знака
- 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_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
- // описываем переменную g - область рисования, ссылку на объект типа System::Drawing::Graphics^
- Graphics^ g = e -> Graphics;
- Pen^ blackPen = gcnew Pen(Color::Black, 2); // ручка
- // размеры окна
- float Wx = ClientRectangle.Width; // ширина окна
- float Wy = ClientRectangle.Height; // высота окна
- // соотношение сторон окна рисования
- float aspectForm = Wx / Wy;
- if (typeOfPicture) {
- print(g, blackPen, lines1, arrayLength1, Vx1, Vy1, aspectFig1, Wx, Wy, aspectForm);
- }
- else {
- print(g, blackPen, lines2, arrayLength2, Vx2, Vy2, aspectFig2, Wx, Wy, aspectForm);
- }
- }
- private: System::Void MyForm_Resize(System::Object^ sender, System::EventArgs^ e) {
- // Добавляем устойчивость рисунка относительно изменения размера окна
- Refresh();
- }
- private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
- keepAspectRatio = true;
- typeOfPicture = 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 :
- typeOfPicture = !typeOfPicture;
- default:
- break;
- }
- Refresh();
- }
Add Comment
Please, Sign In to add comment