Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- namespace KG_Lab_1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- // необходимые "карандаши" для рисования
- Pen blackPen = new Pen(Color.Black);
- Pen redPen = new Pen(Color.Red);
- Pen yellowPen = new Pen(Color.Yellow);
- Pen bluePen = new Pen(Color.Blue);
- SolidBrush brush = new SolidBrush(Color.Black);
- FontFamily fontfam = new FontFamily(System.Drawing.Text.GenericFontFamilies.SansSerif);
- // объекты класса Coord
- Coord X1, X2, Y1, Y2, Z1, Z2, C1; // точки, которые будет соединять отрезок при рисовании координатной плоскости
- Coord XX11, XX21, YY11, YY21, ZZ11, ZZ21;
- Coord XX12, XX22, YY12, YY22, ZZ12, ZZ22;
- Coord XX13, XX23, YY13, YY23, ZZ13, ZZ23;
- Coord XX14, XX24, YY14, YY24, ZZ14, ZZ24;
- // всякое
- public int x_center, y_center;
- struct Coord // хранит две координаты x и y
- {
- public float x;
- public float y;
- Coord(float sx, float sy)
- {
- x = sx;
- y = sy;
- }
- }
- public void center_tochka() // функция для построения координатной плоскости
- {
- x_center = ProstPictureBox.Width / 2;
- y_center = ProstPictureBox.Height / 2;
- X1.x = x_center + 150;
- X1.y = y_center;
- X2.x = x_center - 150;
- X2.y = y_center;
- Z1.x = y_center;
- Z1.y = x_center + 150;
- Z2.x = y_center;
- Z2.y = x_center - 150;
- Y1.x = x_center - 75;
- Y1.y = y_center - 75;
- Y2.x = x_center + 75;
- Y2.y = y_center + 75;
- }
- private void tochka() // находим нынешние координаты точки
- {
- x_center = ProstPictureBox.Width / 2;
- y_center = ProstPictureBox.Height / 2;
- C1.x = x_center - 5 - trackBar1.Value + trackBar2.Value/2; // по нормальному надо умножать на тангенс угла
- C1.y = y_center - 5 + trackBar2.Value/2 - trackBar3.Value;
- }
- private void svyazi() // находим координаты для рисования связей (линий проекций)
- {
- x_center = ProstPictureBox.Width / 2;
- y_center = ProstPictureBox.Height / 2;
- // красные
- XX11.x = C1.x + 5;
- XX11.y = C1.y + 5;
- XX21.x = x_center - trackBar1.Value;
- XX21.y = y_center - trackBar3.Value;
- YY11.x = C1.x + 5;
- YY11.y = C1.y + 5;
- YY21.x = x_center + trackBar2.Value / 2;
- YY21.y = y_center + trackBar2.Value / 2 - trackBar3.Value;
- ZZ11.x = C1.x + 5;
- ZZ11.y = C1.y + 5;
- ZZ21.x = C1.x + 5;
- ZZ21.y = C1.y + 5 + trackBar3.Value;
- // желтые
- XX12.x = x_center;
- XX12.y = y_center;
- XX22.x = x_center - trackBar1.Value;
- XX22.y = y_center;
- YY12.x = x_center;
- YY12.y = y_center;
- YY22.x = x_center + trackBar2.Value / 2;
- YY22.y = y_center + trackBar2.Value / 2;
- ZZ12.x = x_center;
- ZZ12.y = y_center;
- ZZ22.x = x_center;
- ZZ22.y = y_center - trackBar3.Value;
- // синие
- XX13.x = C1.x + 5;
- XX13.y = C1.y + 5 + trackBar3.Value;
- XX23.x = x_center - trackBar1.Value;
- XX23.y = y_center;
- YY13.x = x_center - trackBar1.Value;
- YY13.y = y_center - trackBar3.Value;
- YY23.x = x_center - trackBar1.Value;
- YY23.y = y_center;
- // --
- ZZ13.x = x_center + trackBar2.Value / 2;
- ZZ13.y = y_center + trackBar2.Value / 2 - trackBar3.Value;
- ZZ23.x = x_center + trackBar2.Value / 2;
- ZZ23.y = y_center + trackBar2.Value / 2;
- XX14.x = C1.x + 5;
- XX14.y = C1.y + 5 + trackBar3.Value;
- XX24.x = x_center + trackBar2.Value / 2;
- XX24.y = y_center + trackBar2.Value / 2;
- // --
- YY14.x = x_center - trackBar1.Value;
- YY14.y = y_center - trackBar3.Value;
- YY24.x = x_center;
- YY24.y = y_center - trackBar3.Value;
- ZZ14.x = x_center + trackBar2.Value / 2;
- ZZ14.y = y_center + trackBar2.Value / 2 - trackBar3.Value;
- ZZ24.x = x_center;
- ZZ24.y = y_center - trackBar3.Value;
- }
- private void ProstPictureBox_Paint(object sender, PaintEventArgs e)
- {
- center_tochka();
- Graphics g = e.Graphics;
- // рисуем оси
- g.DrawLine(blackPen, X1.x, X1.y, X2.x, X2.y);
- g.DrawLine(blackPen, Z1.x, Z1.y, Z2.x, Z2.y);
- g.DrawLine(blackPen, Y1.x, Y1.y, Y2.x, Y2.y);
- //подписываем оси
- Font fnt = new Font(fontfam, 10);
- g.DrawString("X", fnt, brush, X2.x, X2.y);
- g.DrawString("Z", fnt, brush, Z2.x, Z2.y);
- g.DrawString("Y", fnt, brush, Y2.x, Y2.y);
- tochka();
- /* пытаемся рисовать перпендикуляры....
- // пока порассуждаем
- // перпендикуляр будет соединять линию начиная от точки до оси
- // в принципе обе координаты нам известы, осталось правильно подсчитать
- // ну и нарисуем в другом цвете линии
- // начнем с одного перпендикуляра
- // для начала возможно нужна функция, которая будет определять координаты линий */
- svyazi();
- // красные
- g.DrawLine(yellowPen, XX12.x, XX12.y, XX22.x, XX22.y);
- g.DrawLine(yellowPen, YY12.x, YY12.y, YY22.x, YY22.y);
- g.DrawLine(yellowPen, ZZ12.x, ZZ12.y, ZZ22.x, ZZ22.y);
- // желтые
- g.DrawLine(redPen, XX11.x, XX11.y, XX21.x, XX21.y);
- g.DrawLine(redPen, YY11.x, YY11.y, YY21.x, YY21.y);
- g.DrawLine(redPen, ZZ11.x, ZZ11.y, ZZ21.x, ZZ21.y);
- // синие
- g.DrawLine(bluePen, XX13.x, XX13.y, XX23.x, XX23.y);
- g.DrawLine(bluePen, YY13.x, YY13.y, YY23.x, YY23.y);
- g.DrawLine(bluePen, ZZ13.x, ZZ13.y, ZZ23.x, ZZ23.y);
- g.DrawLine(bluePen, XX14.x, XX14.y, XX24.x, XX24.y);
- g.DrawLine(bluePen, YY14.x, YY14.y, YY24.x, YY24.y);
- g.DrawLine(bluePen, ZZ14.x, ZZ14.y, ZZ24.x, ZZ24.y);
- // рисуем точку
- g.FillEllipse(brush, C1.x, C1.y, 10, 10);
- }
- private void trackBar1_Scroll(object sender, EventArgs e)
- {
- ProstPictureBox.Invalidate();
- }
- private void trackBar2_Scroll(object sender, EventArgs e)
- {
- ProstPictureBox.Invalidate();
- }
- private void trackBar3_Scroll(object sender, EventArgs e)
- {
- ProstPictureBox.Invalidate();
- }
- }
- }
Add Comment
Please, Sign In to add comment