Точка в 3D пространстве

Автор работы: Пользователь скрыл имя, 18 Ноября 2015 в 21:48, лабораторная работа

Описание работы

Содержание экрана:
пространственный чертеж с изображением точки T, ее проекций на координатные плоскости T1, T2, T3 и ее проекций на координатные оси TX, TY, TZ, а также линий связи (с учетом выбранного типа проецирования и расположения точки камеры);
комплексный чертеж с изображением проекций точки T – T1, T2, T3, TX, TY, TZ, а также линий связи;
ползунковые переключатели для интерактивного изменения координат точки T и угла между осями Ox и Oy на пространственном чертеже.

Файлы: 1 файл

Laba1_Otchet.docx

— 647.71 Кб (Скачать файл)

Х_pict,Y_pict – начало координат  

Angle_Y- угол наклона оси OY

XT, YT, ZT – трехмерные координаты  точки Т

rasst - отступ от края рисунка

 

Перейдем к непосредственным вычислениям. Сначала определим координаты для отрисовки осей координат:

x1 = new PointF(X_pict * 2 - rasst, Y_pict);

x2 = new PointF(rasst, Y_pict);

z1 = new PointF(X_pict, Y_pict * 2 - rasst);

z2 = new PointF(X_pict, rasst);

y1 = new PointF(X_pict - Y_pict * cos_Y, Y_pict - Y_pict * sin_Y);

y2 = new PointF(X_pict + Y_pict * cos_Y, Y_pict + Y_pict * sin_Y);

Вычисления координат для отрисовки осей координат закончены. Теперь преступим к пересчету координат точки из трехмерной системы координат в экранную для пространственного чертежа.

x0 = X_pict - XT + YT * cos_Y - 2*otstup;

y0 = Y_pict - ZT + YT * sin_Y - 2*otstup;

 

k1 = X_pict - XT - 2*otstup;

k2 = Y_pict - ZT - 2*otstup;

k3 = x0 + XT;

k4 = y0 + ZT;

               

T = new PointF(x0 + otstup, y0 + otstup);

T1 = new PointF(x0 + otstup, k4 + otstup);

T2 = new PointF(k1 + otstup, k2 + otstup);

T3 = new PointF(k3 + otstup, y0 + otstup);

Tx = new PointF(k1 + otstup, Y_pict-otstup/2);

Ty = new PointF(k3 + otstup, k4 + otstup);

Tz = new PointF(X_pict-otstup/2, k2 + otstup);

    1. Вычисление координат точек и линий проекций для комплексного чертежа.

Обозначим используемые переменные:

Х_pict,Y_pict – начало координат  

Angle_Y- угол наклона оси OY

XT, YT, ZT – трехмерные координаты  точки Т

 

x1 = new PointF(X_pict * 2 - rasst, Y_pict);

x2 = new PointF(rasst, Y_pict);

z1 = new PointF(X_pict, Y_pict * 2 - rasst);

z2 = new PointF(X_pict, rasst);

 

                k1 = X_pict - XT - 2*otstup;

                k2 = Y_pict - ZT - 2*otstup;

                k3 = X_pict + YT - 2*otstup;

                k4 = Y_pict + YT - 2*otstup;

 

                Tx = new PointF(k1 + otstup, Y_pict);

                Ty = new PointF(k3 + otstup, Y_pict);

                Ty1 = new PointF(X_pict, k4 + otstup);

                Tz = new PointF(X_pict, k2 + otstup);

 

                T1 = new PointF(k1 + otstup, k4 + otstup);

                T2 = new PointF(k1 + otstup, k2 + otstup);

                T3 = new PointF(k3 + otstup, k2 + otstup);

3) Отрисовка

Для отрисовки линий будем использовать функцию DrawLine. Для отрисовки точек будем использовать функцию FillEllipse. Для отрисовки четверть окружности будем использовать функцию DrawArc.

      1. Отрисовка пространственного чертежа.

Сначала нарисуем координатные оси и подпишем их:

DrawLine(Mypen, y1, y2);

DrawString("Y", drawFont, Brushes.Black, y2.X+rasst, y2.Y-rasst);

DrawLine(Mypen, z1, z2);

DrawString("Z", drawFont, Brushes.Black, z1.X-rasst, rasst);

 

DrawLine(Mypen, x1, x2);

DrawString("X", drawFont, Brushes.Black, rasst, x2.Y-rasst);

Затем нарисуем линии проекции:

 

DrawLine(Mypen, T, T2);

DrawLine(Mypen, T, T3);

DrawLine(Mypen, T, T1);

DrawLine(Mypen, T1, Tx);

DrawLine(Mypen, Tx, T2);

DrawLine(Mypen, T1, Ty);

DrawLine(Mypen, Ty, T3);

DrawLine(Mypen, T3, Tz);

DrawLine(Mypen, Tz, T2);

 

Теперь нарисуем точки и подпишем их:

//point T:

FillEllipse(Brushes.Red, x0, y0, R, R);

DrawString("T", drawFont, Brushes.Black, x0 + otstup, y0 + 2*otstup);

//point T1:

FillEllipse(Brushes.Green, x0, k4, R, R);

DrawString("T1", drawFont, Brushes.Black, x0 + otstup, k4 + 2*otstup);

            //point T2:

FillEllipse(Brushes.Green, k1, k2, R, R);

DrawString("T2", drawFont, Brushes.Black, k1 - 7*otstup, k2 + 2*otstup);

            //point T3:

FillEllipse(Brushes.Green, k3, y0, R, R);

DrawString("T3", drawFont, Brushes.Black, k3 + otstup, y0 + 2*otstup);

            //point Tx:

FillEllipse(Brushes.Black, k1, Y_pict-2*otstup, R, R);

DrawString("Tx", drawFont, Brushes.Black, k1 + otstup, Y_pict+3*otstup);

            //point Ty:

FillEllipse(Brushes.Black, k3, k4, R, R);

DrawString("Ty", drawFont, Brushes.Black, k3 + otstup, k4 + 3*otstup);

            //point Tz:

FillEllipse(Brushes.Black, X_pict-2*radius, k2, R, R);

DrawString("Tz", drawFont, Brushes.Black, X_pict+otstup, k2 -3*otstup);

 

На этом отрисовка пространственного чертежа окончена.

 

      1. Отрисовка комплексного чертежа.

 

Аналогично пространственному, сначала отрисуем координатные оси и подпишем их.

 

//Z:

DrawLine(Mypen, z1, z2);

DrawString("Z", drawFont, Brushes.Black, z1.X-rasst, rasst);

//X:

DrawLine(Mypen, x1, x2);

DrawString("X", drawFont, Brushes.Black, rasst, x2.Y-rasst);

//Y:

DrawString("Y", drawFont, Brushes.Black, z1.X+rasst, z1.Y-rasst);

DrawString("Y", drawFont, Brushes.Black, x1.X - rasst, x1.Y + rasst);

 

Рисуем линии проекции и четверть окружность.

DrawLine(Mypen, Ty, T3);

DrawLine(Mypen, T3, Tz);

DrawLine(Mypen, Tz, T2);

DrawLine(Mypen, T2, Tx);

DrawLine(Mypen, Tx, T1);

DrawLine(Mypen, T1, Ty1);

 

DrawArc(Mypen, X_pict - YT, Y_pict - YT, YT * 2, YT * 2, 0, 90);

DrawArc(Mypen, X_pict + YT, Y_pict + YT, -YT * 2, -YT * 2, 180, 90);

 

В последнюю очередь рисуем точки и подписываем их.

 

//T1:

DrawString("T1", drawFont, Brushes.Black, k1 + otstup, k4 + 2*otstup);

FillEllipse(Brushes.Green, k1-radius, k4, R, R);

            //T2:

DrawString("T2", drawFont, Brushes.Black, k1 + otstup, k2 + 2*otstup);

FillEllipse(Brushes.Green, k1-radius, k2, R, R);

            //T3:

DrawString("T3", drawFont, Brushes.Black, k3 + otstup, k2 + 2*otstup);

FillEllipse(Brushes.Green, k3-radius, k2, R, R);

            //Tx:

DrawString("Tx", drawFont, Brushes.Black, k1 + otstup, Y_pict + 2*otstup);

FillEllipse(Brushes.Black, k1-radius, Y_pict-2*radius, R,R);

            //Ty:

DrawString("Ty1", drawFont, Brushes.Black, k3 + otstup, Y_pict + 2*otstup);

DrawString("Ty2", drawFont, Brushes.Black, X_pict + otstup, k4 + 2*otstup);

FillEllipse(Brushes.Black, k3-radius, Y_pict-2*radius, R, R);

FillEllipse(Brushes.Black, X_pict-2*radius, k4-radius, R, R);

            //Tz:

DrawString("Tz", drawFont, Brushes.Black, X_pict + otstup, k2+2*otstup);

FillEllipse(Brushes.Black, X_pict - 2*radius, k2 - radius, R, R);

 

РУКОВОДСТВО ПРОГРАММИСТА

Лабораторная работа реализована на языке C# в Microsoft Visual Studio Community 2015.

Использующиеся пространства имен:

  • using System;
  • using System.Drawing;
  • using System.Windows.Forms;

Использованы стандартные компоненты платформы .Net Framework 4.0:

Схема классового взаимодействия:

 

 






 




 



 


 


 


 



 

Опишем заголовки классов.

Класс точка. Объект этого класса используется в основной форме приложения.

class MyPoint

    {

        float x;

        float y;

        float z;

        public MyPoint(float x1, float y1, float z1);

        public float getX();

        public float getY();

        public float getZ();

        public void setPosition(float x1, float y1, float z1); //изменение координат точки

    }

 

public partial class Form1 : Form

 {

MyPoint point;

int otstup, radius, rasst, R;//отступы, радиусы

PointF x1, x2, y1, y2, z1, z2;//точки для отрисовки осей

PointF T, T1, T2, T3, Tx, Ty, Ty1, Tz;

float x0, y0;//координаты

float XT, YT, ZT;//координаты точки, задающиеся пользователем

float k1, k2, k3, k4;

float X_pict, Y_pict;//координаты середины pictureBox

double angle_Y;//угол наклона оси OY

 

public Form1();

//отрисовка точек на комплексном чертеже

private void draw_2d_point(PaintEventArgs e);

//координаты для отрисовки точек

private void point_coords(bool f);

//отрисовка точек на пространственном чертеже

private void draw_3d_point(PaintEventArgs e);

//изменение трекбаров

private void YtrackBar_Scroll(object sender, EventArgs e);

private void ZtrackBar_Scroll(object sender, EventArgs e);

private void XtrackBar_Scroll(object sender, EventArgs e);

private void Angle_trackBar_Scroll(object sender, EventArgs e);

 

//Изменение координат точки Т

private void change_XYZ();

//sin

private float sin_y(double angle);

//cos

private float cos_y(double angle);

//координаты для отрисовки осей

private void coords(bool is_3d);

//отрисовка осей

private void Draw_os(PaintEventArgs e, bool is_3d);

 

private void pictureBox2_Paint(object sender, PaintEventArgs e);

private void pictureBox1_Paint(object sender, PaintEventArgs e);

}

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

После запуска программы на экране появится следующее окно:

 

 

На экране 2 чертежа и 4 ползунка. Левый чертеж – пространственный, правый – комплексный. При движении любого ползунка чертежи перерисовываются (при изменении угла комплексный чертеж не перерисовывается).

РЕЗУЛЬТАТЫ

Выведены формулы для построения пространственного макета и комплексного чертежа точки в экранной системе координат. Разработана программа, выводящая на экран пространственный макет и комплексный чертеж точки, и позволяющая динамически изменять координаты точки и угол между осями Oy  и Ox.

 

 

 


Информация о работе Точка в 3D пространстве