Tvor0zhok

КГ лабораторная №2

Feb 13th, 2022 (edited)
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.08 KB | None | 0 0
  1. // глобальный массивы вещественных чисел,
  2. // в котором хранятся координаты точек
  3.  
  4. // ЗАЯЦ
  5. float lines1[] = {
  6. // голова
  7. 0.5f, 3.f, 1.f, 4.5f, // от левой щеки вверх до уха
  8. 1.f, 4.5f, 0.5f, 6.f, // левое ухо слева снизу вверх
  9. 0.5f, 6.f, 0.5f, 7.5f, // левое ухо слева
  10. 0.5f, 7.5f, 1.f, 8.f, // левое ухо верх слева
  11. 1.f, 8.f, 1.5f, 8.f, // левое ухо верх середина
  12. 1.5f, 8.f, 2.f, 7.5f, // левое ухо верх справа
  13. 2.f, 7.5f, 1.5f, 6.f, // левое ухо справа сверху вниз
  14. 1.5f, 6.f, 1.5f, 4.5f, // левое ухо справа до макушки
  15. 1.5f, 4.5f, 3.f, 4.5f, // макушка
  16. 3.f, 4.5f, 3.f, 6.f, // правое ухо слева снизу вверх
  17. 3.f, 6.f, 2.5f, 7.5f, // правое ухо слева
  18. 2.5f, 7.5f, 3.f, 8.f, // правое ухо верх слева
  19. 3.f, 8.f, 3.5f, 8.f, // правое ухо верх середина
  20. 3.5f, 8.f, 4.f, 7.5f, // правое ухо верх справа
  21. 4.f, 7.5f, 4.f, 6.f, // правое ухо сверху вниз
  22. 4.f, 6.f, 3.5f, 4.5f, // правое ухо справа
  23. 3.5f, 4.5f, 4.f, 3.f, // от правого уха вниз до щеки
  24. 4.f, 3.f, 3.5f, 1.5f, // правая скула
  25. 3.5f, 1.5f, 2.5f, 1.f, // подбородок справа
  26. 2.5f, 1.f, 2.f, 1.f, // подбородок снизу
  27. 2.f, 1.f, 1.f, 1.5f, // подбородок слева
  28. 1.f, 1.5f, 0.5f, 3.f, // левая скула
  29.  
  30. // туловище
  31. 4.f, 3.f, 5.5f, 3.5f, // спина от головы вправо
  32. 5.5f, 3.5f, 7.f, 3.5f, // спина верх
  33. 7.f, 3.5f, 7.5f, 2.5f, // спина сверху до хвоста
  34. 7.5f, 2.5f, 8.f, 2.5f, // хвост сверху
  35. 8.f, 2.5f, 8.f, 2.f, // хвост справа
  36. 8.f, 2.f, 7.5f, 2.f, // хвост низ справа налево
  37. 7.5f, 2.f, 7.5f, 0.5f, // задняя нога справа сверху вниз
  38. 7.5f, 0.5f, 6.5f, 0.5f, // задняя нога низ
  39. 6.5f, 0.5f, 6.5f, 1.f, // задняя нога слева
  40. 6.5f, 1.f, 6.f, 1.f, // между задних ног
  41. 6.f, 1.f, 6.f, 0.5f, // левая задняя нога справа
  42. 6.f, 0.5f, 5.f, 0.5f, // левая задняя нога низ
  43. 5.f, 0.5f, 5.f, 1.f, // левая задняя нога слева
  44. 5.f, 1.f, 4.f, 1.f, // между задними и передними ногами
  45. 4.f, 1.f, 4.f, 0.5f, // правая передняя нога справа
  46. 4.f, 0.5f, 3.f, 0.5f, // правая передняя нога низ
  47. 3.f, 0.5f, 3.f, 1.f, // правая передняя нога слева
  48. 3.f, 1.f, 2.5f, 1.f, // между передних ног
  49. 2.5f, 1.f, 2.5f, 0.5f, // передняя нога справа
  50. 2.5f, 0.5f, 1.5f, 0.5f, // передняя нога низ
  51. 1.5f, 0.5f, 1.5f, 1.25f, // передняя нога слева
  52.  
  53. // левый глаз
  54. 1.5f, 3.5f, 1.5f, 3.f, // левый глаз слева сверху вниз
  55. 1.5f, 3.f, 2.f, 3.f, // левый глаз низ
  56. 2.f, 3.f, 2.f, 3.5f, // левый глаз справа
  57. 2.f, 3.5f, 1.5f, 3.5f, // левый глаз верх
  58.  
  59. // правый глаз
  60. 2.5f, 3.5f, 2.5f, 3.f, // правый глаз слева
  61. 2.5f, 3.f, 3.f, 3.f, // правый глаз снизу
  62. 3.f, 3.f, 3.f, 3.5f, // правый глаз справа
  63. 3.f, 3.5f, 2.5f, 3.5f, // правый глаз сверху
  64.  
  65. // ушные раковины
  66. 1.f, 5.5f, 1.f, 7.f, // левая ушная раковина
  67. 3.5f, 5.5f, 3.5f, 7.f, // правая ушная раковина
  68.  
  69. // нос
  70. 2.f, 2.5f, 2.5f, 2.5f, // нос сверху
  71. 2.5f, 2.5f, 2.25f, 2.f, // нос справа
  72. 2.25f, 2.f, 2.f, 2.5f // нос слева
  73. };
  74.  
  75. // МУХОМОР
  76. float lines2[] = {
  77. // ножка гриба
  78. 10.f, 1.f, 12.f, 2.f, // ножка гриба снизу справа
  79. 12.f, 2.f, 13.f, 4.f, // ножка гриба справа
  80. 13.f, 4.f, 12.f, 9.f, // ножка гриба справа (выше)
  81. 12.f, 9.f, 13.f, 12.f, // ножка гриба сверху справа
  82. 13.f, 12.f, 11.f, 13.f, // ножка гриба сверху
  83. 11.f, 13.f, 9.f, 13.f, // ножка гриба сверху по центру
  84. 9.f, 13.f, 7.f, 12.f, // ножка гриба сверху
  85. 7.f, 12.f, 8.f, 9.f, // ножка гриба сверху слева
  86. 8.f, 9.f, 7.f, 4.f, // ножка гриба слева
  87. 7.f, 4.f, 8.f, 2.f, // ножка гриба слева (ниже)
  88. 8.f, 2.f, 10.f, 1.f, // ножка гриба снизу слева
  89.  
  90. // шапка гриба (внешняя часть)
  91. 12.f, 9.f, 14.f, 9.f, // горизонтальная линия снизу справа
  92. 14.f, 9.f, 17.f, 10.f, // диагональная линия снизу справа
  93. 17.f, 10.f, 19.f, 12.f, // диагональная линия справа
  94. 19.f, 12.f, 19.f, 15.f, // вертикальная линия справа
  95. 19.f, 15.f, 17.f, 17.f, // диагональная линия справа
  96. 17.f, 17.f, 12.f, 28.f, // большая диагональная линия справа
  97. 12.f, 28.f, 11.f, 29.f, // маленькая диагональная линия сверху справа
  98. 11.f, 29.f, 9.f, 29.f, // горизонтальная линия сверху по центру
  99. 9.f, 29.f, 8.f, 28.f, // маленькая диагональная линия сверху слева
  100. 8.f, 28.f, 3.f, 17.f, // большая диагональная линия слева
  101. 3.f, 17.f, 1.f, 15.f, // диагональная линия слева
  102. 1.f, 15.f, 1.f, 12.f, // вертикальная линия слева
  103. 1.f, 12.f, 3.f, 10.f, // диагональная линия слева
  104. 3.f, 10.f, 6.f, 9.f, // диагональная линия снизу слева
  105. 6.f, 9.f, 8.f, 9.f, // горизонтальная линия снизу слева
  106.  
  107. // шапка гриба (внутренняя часть)
  108. 37.f / 3, 10.f, 14.f, 10.f, // горизонтальная линия снизу справа
  109. 14.f, 10.f, 16.f, 11.f, // диагональная линия снизу справа
  110. 16.f, 11.f, 18.f, 13.f, // диагональная линия справа
  111. 18.f, 13.f, 16.f, 15.f, // диагональная линия справа
  112. 16.f, 15.f, 13.f, 16.f, // диагональная линия сверху справа
  113. 13.f, 16.f, 7.f, 16.f, // горизонтальная линия по центру
  114. 7.f, 16.f, 4.f, 15.f, // диагональная линия сверху слева
  115. 4.f, 15.f, 2.f, 13.f, // диагональная линия слева
  116. 2.f, 13.f, 4.f, 11.f, // диагональная линия слева
  117. 4.f, 11.f, 6.f, 10.f, // диагональная линия снизу слева
  118. 6.f, 10.f, 23.f / 3, 10.f, // горизонтальная линия снизу слева
  119.  
  120. // складки во внутренней части шапки гриба (линии справа налево)
  121. 13.f, 12.f, 17.f, 14.f, // 1-ая линия
  122. 12.f, 12.5f, 14.f, 47.f / 3, // 2-ая линия
  123. 11.f, 13.f, 12.f, 16.f, // 3-яя линия
  124. 10.f, 13.f, 10.f, 16.f, // 4-ая линия (центральная)
  125. 9.f, 13.f, 8.f, 16.f, // 5-ая линия
  126. 8.f, 12.5f, 6.f, 47.f / 3, // 6-ая линия
  127. 7.f, 12.f, 3.f, 14.f, // 7-ая линия
  128.  
  129. // самое верхнее пятно гриба (по часовой стрелке)
  130. 8.f, 28.f, 9.f, 28.f, // горизонтальная линия сверху
  131. 9.f, 28.f, 10.f, 27.f, // диагональная линия сверху справа
  132. 10.f, 27.f, 10.f, 26.f, // вертикальная линия справа
  133. 10.f, 26.f, 9.f, 25.f, // диагональная линия снизу справа
  134. 9.f, 25.f, 8.f, 25.f, // горизонтальная линия снизу
  135. 8.f, 25.f, 7.f, 25.8f, // диагольная линия снизу слева
  136.  
  137. // пятно гриба (ниже и правее 1-ого)
  138. 11.f, 25.f, 12.f, 25.f, // горизонтальная линия сверху
  139. 12.f, 25.f, 13.f, 24.f, // диагональная линия сверху справа
  140. 13.f, 24.f, 13.f, 23.f, // вертикальная линия справа
  141. 13.f, 23.f, 12.f, 22.f, // диагональная линия снизу справа
  142. 12.f, 22.f, 11.f, 22.f, // горизонтальная линия снизу
  143. 11.f, 22.f, 10.f, 23.f, // диагональная линия снизу слева
  144. 10.f, 23.f, 10.f, 24.f, // вертикальная линия слева
  145. 10.f, 24.f, 11.f, 25.f, // диагональная линия сверху слева
  146.  
  147. // пятно гриба (ниже и левее 2-ого)
  148. 7.f, 22.f, 8.f, 22.f, // горизонтальная линия сверху
  149. 8.f, 22.f, 9.f, 21.f, // диагональная линия сверху справа
  150. 9.f, 21.f, 9.f, 20.f, // вертикальная линия справа
  151. 9.f, 20.f, 8.f, 19.f, // диагональная линия снизу справа
  152. 8.f, 19.f, 7.f, 19.f, // горизнотальная линия снизу
  153. 7.f, 19.f, 6.f, 20.f, // диагональная линия снизу слева
  154. 6.f, 20.f, 6.f, 21.f, // вертикальная линия слева
  155. 6.f, 21.f, 7.f, 22.f, // диагональная линия сверху слева
  156.  
  157. // пятно гриба (ниже и правее 3-его)
  158. 12.f, 21.f, 14.f, 21.f, // горизонтальная линия сверху
  159. 14.f, 21.f, 15.f, 20.f, // диагональная линия сверху справа
  160. 15.f, 20.f, 15.f, 18.f, // вертикальная линия справа
  161. 15.f, 18.f, 14.f, 17.f, // диагональная линия снизу справа
  162. 14.f, 17.f, 12.f, 17.f, // горизонтальная линия снизу
  163. 12.f, 17.f, 11.f, 18.f, // диагональная линия снизу слева
  164. 11.f, 18.f, 11.f, 20.f, // вертикальная линия слева
  165. 11.f, 20.f, 12.f, 21.f, // диагональная линия сверху слева
  166.  
  167. // пятно гриба (ниже 3-его)
  168. 7.f, 18.f, 8.f, 18.f, // горизонтальная линия сверху
  169. 8.f, 18.f, 9.f, 17.f, // диагольная линия сверху справа
  170. 9.f, 17.f, 8.f, 16.f, // диагональная линия снизу справа
  171. 7.f, 16.f, 6.f, 17.f, // диагональная линия снизу слева
  172. 6.f, 17.f, 7.f, 18.f, // диагольная линия сверху слева
  173.  
  174. // пятно гриба (левее 5-ого)
  175. 4.f, 19.2f, 5.f, 18.f, // диагональная линия сверху справа
  176. 5.f, 18.f, 5.f, 17.f, // вертикальная линия справа
  177. 5.f, 17.f, 4.f, 16.f, // диагональная линия снизу справа
  178. 4.f, 16.f, 2.f, 16.f, // горизонтальная линия снизу
  179.  
  180. // маленькое пятно гриба слева
  181. 1.f, 15.f, 2.f, 14.f, // диагональная линия сверху справа
  182. 2.f, 14.f, 1.f, 13.f, // диагональная линия снизу справа
  183.  
  184. // пятно гриба справа
  185. 17.f, 17.f, 16.f, 16.f, // диагональная линия сверху слева
  186. 16.f, 16.f, 17.f, 15.f, // диагональаня линия снизу справа
  187. 17.f, 15.f, 19.f, 15.f, // горизонтальная линия снизу
  188.  
  189. // трава слева
  190. 10.f, 1.f, 4.f, 1.f, // нижняя платформа слева
  191. 4.f, 1.f, 2.f, 3.f, // диагональная линия снизу слева
  192. 2.f, 3.f, 5.f, 3.f, // горизонтальная линия
  193. 5.f, 3.f, 3.f, 5.f, // диагональная линия
  194. 3.f, 5.f, 5.f, 4.f, // диагональная линия (травинка)
  195. 5.f, 4.f, 5.f, 6.f, // вертикальная линия
  196. 5.f, 6.f, 6.f, 4.f, // диагональная линия (травинка)
  197. 6.f, 4.f, 6.f, 8.f, // вертикальная линия
  198. 6.f, 8.f, 7.f, 4.f, // диагональная линия (травинка)
  199.  
  200. // трава справа
  201. 10.f, 1.f, 16.f, 1.f, // нижняя платформа справа
  202. 16.f, 1.f, 18.f, 3.f, // диагональная линия снизу справа
  203. 18.f, 3.f, 15.f, 3.f, // горизонтальная линия
  204. 15.f, 3.f, 17.f, 5.f, // диагональная линия
  205. 17.f, 5.f, 15.f, 4.f, // диагональная линия (травинка)
  206. 15.f, 4.f, 15.f, 6.f, // вертикальная линия
  207. 15.f, 6.f, 14.f, 4.f, // диагональная линия (травинка)
  208. 14.f, 4.f, 14.f, 8.f, // вертикальная линия
  209. 14.f, 8.f, 13.f, 4.f // диагональная линия (травинка)
  210. };
  211.  
  212. unsigned int arrayLength1 = sizeof(lines1) / sizeof(float);
  213. unsigned int arrayLength2 = sizeof(lines2) / sizeof(float);
  214.  
  215. // размеры рисунка
  216. float Vx1 = 8.5f; // по горизонтали
  217. float Vy1 = 8.5f; // по вертикали
  218.  
  219. float Vx2 = 20.f; // по горизонтали
  220. float Vy2 = 30.f; // по вертикали
  221.  
  222. // соотношение сторон рисунка
  223. float aspectFig1 = Vx1 / Vy1;
  224. float aspectFig2 = Vx2 / Vy2;
  225.  
  226. ///...///
  227.  
  228. private: bool keepAspectRatio; // значение - сохранять ли соотношения рисунка?
  229. private: bool typeOfPicture; // true - заяц, false - мухомор
  230.  
  231. private: void print(Graphics^ g, Pen^ blackPen, float lines[], unsigned int arrayLength, float Vx, float Vy, float aspectFig, float Wx, float Wy, float aspectForm)
  232. {
  233. g->Clear(Color::White);
  234.  
  235. float Sx, Sy;
  236.  
  237. if (keepAspectRatio) {
  238. // коэффициенты увеличения при сохранении исходного соотношения сторон
  239. Sx = Sy = aspectFig1 < aspectForm ? Wy / Vy : Wx / Vx;
  240. }
  241. else {
  242. Sx = Wx / Vx; // коэффициент увеличения по оси Ox
  243. Sy = Wy / Vy; // коэффициент увеличения по оси Oy
  244. }
  245.  
  246. float Ty = Sy * Vy; // смещение в положительную сторону по оси Oy после смены знака
  247.  
  248. for (int i = 0; i < arrayLength; i += 4)
  249. g->DrawLine(blackPen, Sx * lines[i], Ty - Sy * lines[i + 1], Sx * lines[i + 2], Ty - Sy * lines[i + 3]);
  250. }
  251.  
  252. private: System::Void MyForm_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
  253. // описываем переменную g - область рисования, ссылку на объект типа System::Drawing::Graphics^
  254. Graphics^ g = e -> Graphics;
  255.  
  256. Pen^ blackPen = gcnew Pen(Color::Black, 2); // ручка
  257.  
  258. // размеры окна
  259. float Wx = ClientRectangle.Width; // ширина окна
  260. float Wy = ClientRectangle.Height; // высота окна
  261.  
  262. // соотношение сторон окна рисования
  263. float aspectForm = Wx / Wy;
  264.  
  265. if (typeOfPicture) {
  266. print(g, blackPen, lines1, arrayLength1, Vx1, Vy1, aspectFig1, Wx, Wy, aspectForm);
  267. }
  268. else {
  269. print(g, blackPen, lines2, arrayLength2, Vx2, Vy2, aspectFig2, Wx, Wy, aspectForm);
  270. }
  271. }
  272.  
  273. private: System::Void MyForm_Resize(System::Object^ sender, System::EventArgs^ e) {
  274. // Добавляем устойчивость рисунка относительно изменения размера окна
  275. Refresh();
  276. }
  277.  
  278. private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
  279. keepAspectRatio = true;
  280. typeOfPicture = true;
  281. }
  282.  
  283. private: System::Void MyForm_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) {
  284. switch (e->KeyCode)
  285. {
  286. case Keys::M :
  287. keepAspectRatio = !keepAspectRatio;
  288. break;
  289. case Keys::N :
  290. typeOfPicture = !typeOfPicture;
  291. default:
  292. break;
  293. }
  294.  
  295. Refresh();
  296. }
Add Comment
Please, Sign In to add comment