Guest User

Untitled

a guest
Dec 10th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.88 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace KG_Lab_1
  11. {
  12. public partial class Form1 : Form
  13. {
  14. public Form1()
  15. {
  16. InitializeComponent();
  17. }
  18.  
  19. // необходимые "карандаши" для рисования
  20. Pen blackPen = new Pen(Color.Black);
  21. Pen redPen = new Pen(Color.Red);
  22. Pen yellowPen = new Pen(Color.Yellow);
  23. Pen bluePen = new Pen(Color.Blue);
  24. SolidBrush brush = new SolidBrush(Color.Black);
  25. FontFamily fontfam = new FontFamily(System.Drawing.Text.GenericFontFamilies.SansSerif);
  26.  
  27.  
  28. // объекты класса Coord
  29. Coord X1, X2, Y1, Y2, Z1, Z2, C1; // точки, которые будет соединять отрезок при рисовании координатной плоскости
  30. Coord XX11, XX21, YY11, YY21, ZZ11, ZZ21;
  31. Coord XX12, XX22, YY12, YY22, ZZ12, ZZ22;
  32. Coord XX13, XX23, YY13, YY23, ZZ13, ZZ23;
  33. Coord XX14, XX24, YY14, YY24, ZZ14, ZZ24;
  34. // всякое
  35. public int x_center, y_center;
  36.  
  37.  
  38. struct Coord // хранит две координаты x и y
  39. {
  40. public float x;
  41. public float y;
  42. Coord(float sx, float sy)
  43. {
  44. x = sx;
  45. y = sy;
  46. }
  47. }
  48.  
  49. public void center_tochka() // функция для построения координатной плоскости
  50. {
  51. x_center = ProstPictureBox.Width / 2;
  52. y_center = ProstPictureBox.Height / 2;
  53.  
  54. X1.x = x_center + 150;
  55. X1.y = y_center;
  56. X2.x = x_center - 150;
  57. X2.y = y_center;
  58.  
  59. Z1.x = y_center;
  60. Z1.y = x_center + 150;
  61. Z2.x = y_center;
  62. Z2.y = x_center - 150;
  63.  
  64. Y1.x = x_center - 75;
  65. Y1.y = y_center - 75;
  66. Y2.x = x_center + 75;
  67. Y2.y = y_center + 75;
  68. }
  69.  
  70. private void tochka() // находим нынешние координаты точки
  71. {
  72. x_center = ProstPictureBox.Width / 2;
  73. y_center = ProstPictureBox.Height / 2;
  74.  
  75. C1.x = x_center - 5 - trackBar1.Value + trackBar2.Value/2; // по нормальному надо умножать на тангенс угла
  76. C1.y = y_center - 5 + trackBar2.Value/2 - trackBar3.Value;
  77. }
  78.  
  79. private void svyazi() // находим координаты для рисования связей (линий проекций)
  80. {
  81. x_center = ProstPictureBox.Width / 2;
  82. y_center = ProstPictureBox.Height / 2;
  83.  
  84. // красные
  85. XX11.x = C1.x + 5;
  86. XX11.y = C1.y + 5;
  87. XX21.x = x_center - trackBar1.Value;
  88. XX21.y = y_center - trackBar3.Value;
  89.  
  90. YY11.x = C1.x + 5;
  91. YY11.y = C1.y + 5;
  92. YY21.x = x_center + trackBar2.Value / 2;
  93. YY21.y = y_center + trackBar2.Value / 2 - trackBar3.Value;
  94.  
  95. ZZ11.x = C1.x + 5;
  96. ZZ11.y = C1.y + 5;
  97. ZZ21.x = C1.x + 5;
  98. ZZ21.y = C1.y + 5 + trackBar3.Value;
  99.  
  100. // желтые
  101. XX12.x = x_center;
  102. XX12.y = y_center;
  103. XX22.x = x_center - trackBar1.Value;
  104. XX22.y = y_center;
  105.  
  106. YY12.x = x_center;
  107. YY12.y = y_center;
  108. YY22.x = x_center + trackBar2.Value / 2;
  109. YY22.y = y_center + trackBar2.Value / 2;
  110.  
  111. ZZ12.x = x_center;
  112. ZZ12.y = y_center;
  113. ZZ22.x = x_center;
  114. ZZ22.y = y_center - trackBar3.Value;
  115.  
  116. // синие
  117.  
  118. XX13.x = C1.x + 5;
  119. XX13.y = C1.y + 5 + trackBar3.Value;
  120. XX23.x = x_center - trackBar1.Value;
  121. XX23.y = y_center;
  122.  
  123. YY13.x = x_center - trackBar1.Value;
  124. YY13.y = y_center - trackBar3.Value;
  125. YY23.x = x_center - trackBar1.Value;
  126. YY23.y = y_center;
  127.  
  128. // --
  129.  
  130. ZZ13.x = x_center + trackBar2.Value / 2;
  131. ZZ13.y = y_center + trackBar2.Value / 2 - trackBar3.Value;
  132. ZZ23.x = x_center + trackBar2.Value / 2;
  133. ZZ23.y = y_center + trackBar2.Value / 2;
  134.  
  135. XX14.x = C1.x + 5;
  136. XX14.y = C1.y + 5 + trackBar3.Value;
  137. XX24.x = x_center + trackBar2.Value / 2;
  138. XX24.y = y_center + trackBar2.Value / 2;
  139.  
  140. // --
  141.  
  142. YY14.x = x_center - trackBar1.Value;
  143. YY14.y = y_center - trackBar3.Value;
  144. YY24.x = x_center;
  145. YY24.y = y_center - trackBar3.Value;
  146.  
  147. ZZ14.x = x_center + trackBar2.Value / 2;
  148. ZZ14.y = y_center + trackBar2.Value / 2 - trackBar3.Value;
  149. ZZ24.x = x_center;
  150. ZZ24.y = y_center - trackBar3.Value;
  151.  
  152. }
  153.  
  154. private void ProstPictureBox_Paint(object sender, PaintEventArgs e)
  155. {
  156. center_tochka();
  157. Graphics g = e.Graphics;
  158. // рисуем оси
  159. g.DrawLine(blackPen, X1.x, X1.y, X2.x, X2.y);
  160. g.DrawLine(blackPen, Z1.x, Z1.y, Z2.x, Z2.y);
  161. g.DrawLine(blackPen, Y1.x, Y1.y, Y2.x, Y2.y);
  162.  
  163. //подписываем оси
  164. Font fnt = new Font(fontfam, 10);
  165. g.DrawString("X", fnt, brush, X2.x, X2.y);
  166. g.DrawString("Z", fnt, brush, Z2.x, Z2.y);
  167. g.DrawString("Y", fnt, brush, Y2.x, Y2.y);
  168.  
  169. tochka();
  170.  
  171. /* пытаемся рисовать перпендикуляры....
  172. // пока порассуждаем
  173. // перпендикуляр будет соединять линию начиная от точки до оси
  174. // в принципе обе координаты нам известы, осталось правильно подсчитать
  175. // ну и нарисуем в другом цвете линии
  176. // начнем с одного перпендикуляра
  177. // для начала возможно нужна функция, которая будет определять координаты линий */
  178.  
  179. svyazi();
  180.  
  181. // красные
  182. g.DrawLine(yellowPen, XX12.x, XX12.y, XX22.x, XX22.y);
  183. g.DrawLine(yellowPen, YY12.x, YY12.y, YY22.x, YY22.y);
  184. g.DrawLine(yellowPen, ZZ12.x, ZZ12.y, ZZ22.x, ZZ22.y);
  185.  
  186. // желтые
  187. g.DrawLine(redPen, XX11.x, XX11.y, XX21.x, XX21.y);
  188. g.DrawLine(redPen, YY11.x, YY11.y, YY21.x, YY21.y);
  189. g.DrawLine(redPen, ZZ11.x, ZZ11.y, ZZ21.x, ZZ21.y);
  190.  
  191. // синие
  192. g.DrawLine(bluePen, XX13.x, XX13.y, XX23.x, XX23.y);
  193. g.DrawLine(bluePen, YY13.x, YY13.y, YY23.x, YY23.y);
  194. g.DrawLine(bluePen, ZZ13.x, ZZ13.y, ZZ23.x, ZZ23.y);
  195. g.DrawLine(bluePen, XX14.x, XX14.y, XX24.x, XX24.y);
  196. g.DrawLine(bluePen, YY14.x, YY14.y, YY24.x, YY24.y);
  197. g.DrawLine(bluePen, ZZ14.x, ZZ14.y, ZZ24.x, ZZ24.y);
  198.  
  199. // рисуем точку
  200.  
  201. g.FillEllipse(brush, C1.x, C1.y, 10, 10);
  202.  
  203. }
  204.  
  205. private void trackBar1_Scroll(object sender, EventArgs e)
  206. {
  207. ProstPictureBox.Invalidate();
  208. }
  209.  
  210. private void trackBar2_Scroll(object sender, EventArgs e)
  211. {
  212. ProstPictureBox.Invalidate();
  213. }
  214.  
  215. private void trackBar3_Scroll(object sender, EventArgs e)
  216. {
  217. ProstPictureBox.Invalidate();
  218. }
  219.  
  220. }
  221. }
Add Comment
Please, Sign In to add comment