Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
84
Добавлен:
02.05.2014
Размер:
174.93 Кб
Скачать

Описание реализации применяемых методов

  1. Вычисления

      1. Вычисления для пространственного чертежа

Преобразования из системы трехмерных координат точки в экранную систему координат для пространственного чертежа, вычисления координат точек и линий проекций.

Для описания точки введем структуру point2d, которая имеет два аргумента – экранные координаты х и у точки.

Для описание прямой введем структуру line, которая имеет четыре аргумента - экранные координаты х и у начальной и конечной точек.

Опишем эти структуры:

struct point2d {double x; double y;};

struct line {double x1; double y1; double x2; double y2};

Опишем константы:

x0 – координата Х центра системы координат

y0 – координата Y центра системы координат

indent – отступ от края рисунка

radius – радиус отрисовки точек

Опишем используемые переменные, в которые записываются результаты вычислений.

T - заданная точка (тип point2d)

T1, T2, T3 – проекции точки (тип point2d)

oz, ox, oy – координатные оси (тип line)

XoY1, XoY2, XoY3 - линии проекции на плоскость XoY

XoZ1, XoZ2, XoZ3 - линии проекции на плоскость XoZ

YoZ1, YoZ2, YoZ3 - линии проекции на плоскость YoZ

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

line oz, ox, oy;

oz.x1=x0;

oz.y1=y0*2-indent;

oz.x2=x0;

oz.y2=indent;

ox.x1=x0*2-indent;

ox.y1=y0;

ox.x2=indent;

ox.y2=y0;

oy.x1= x0-(x0-indent)*cos(angle*M_PI/180.0f);

oy.y1= y0-(y0- indent)*sin(angle*M_PI/180.0f);

oy.x2= x0+(x0- indent)*cos(angle*M_PI/180.0f);

oy.y2= y0+(y0- indent)*sin(angle*M_PI/180.0f);

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

point2d T, T1, T2, T3

T.x= x0 - x + y*cos(angle*M_PI/180.0f);

T.y= x0 - z + y*sin(angle*M_PI/180.0f);

T1.x=T.x;

T1.y=T.y+z;

T2.x=T.x- y*cos(angle*M_PI/180.0f);

T2.y=T.y- y*sin(angle*M_PI/180.0f);

T3.x=T.x+x;

T3.y=T.y;

line XoY1, XoY2, XoY3;

line XoZ1, XoZ2, XoZ3;

line YoZ1, YoZ2, YoZ3;

XoY1.x1=T.x;

XoY1.y1=T.y;

XoY1.x2=T.x;

XoY1.y2=T.y+z;

XoY2.x1=T.x;

XoY2.y1=T.y+z;

XoY2.x2=x0-x;

XoY2.y2=y0;

XoY3.x1=T.x;

XoY3.y1=T.y+z;

XoY3.x2=T.x+x;

XoY3.y2=T.y+z;

XoZ1.x1=T.x;

XoZ1.y1=T.y;

XoZ1.x2=T.x- y*cos(angle*M_PI/180.0f);

XoZ1.y2=T.y-y* sin(angle*M_PI/180.0f);

XoZ2.x1=T.x-y*cos(angle*M_PI/180.0f);

XoZ2.y1=T.y-y* sin(angle*M_PI/180.0f);

XoZ2.x2=x0-x;

XoZ2.y2=y0;

XoZ3.x1=T.x- y*cos(angle*M_PI/180.0f);

XoZ3.y1= T.y-y* sin(angle*M_PI/180.0f);

XoZ3.x2=x0;

XoZ3.y2=y0-z;

YoZ1.x1=T.x;

YoZ1.y1=T.y;

YoZ1.x2=T.x+x;

YoZ1.y2=T.y;

YoZ2.x1=T.x+x;

YoZ2.y1=T.y;

YoZ2.x2=x0;

YoZ2.y2=y0-z;

YoZ3.x1=T.x+x;

YoZ3.y1=T.y;

YoZ3.x2=T.x+x;

YoZ3.y2=T.y+z;

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

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

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

ZY, XY – координаты линий осей координат (тип line)

L1, L2, L3, L4, L5, L6, Arcp1, Arcp2 – координаты линий проекции (тип line)

T1, T2, T3 – координаты точек проекций (тип point2d)

Приступим к непосредственным вычислениям.

line ZY, XY;

ZY.x1=x0;

ZY.y1= indent;

ZY.x2=x0;

ZY.y2=y0*2-indent;

XY.x1= indent;

XY.y1=y0;

XY.x2=x0*2- indent;

XY.y2=y0;

point2d T1, T2, T3;

T1.x=x0-x;

T1.y=y0+y;

T2.x=x0-x;

T2.y=y0-z;

T3.x= x0+y;

T3.y=y0-z;

line L1, L2, L3, L4, L5, L6, Arcp1, Arcp2;

L1.x1=x0-x;

L1.y1=y0-z;

L1.x2=x0;

L1.y2=L1.y1;

L2.x1=x0-x;

L2.y1=y0-z;

L2.x2=L2.x1;

L2.y2=y0;

L3.x1=x0;

L3.y1=y0-z;

L3.x2=x0+y;

L3.y2=L3.y1;

L4.x1=x0+y;

L4.y1=y0-z;

L4.x2=L4.x1;

L4.y2=y0;

L5.x1=x0-x;

L5.y1=y0+y;

L5.x2=L5.x1;

L5.y2=y0;

L6.x1=x0-x;

L6.y1=y0+y;

L6.x2=x0;

L6.y2=L6.y1;

Arcp1.x1=x0-y;

Arcp1.y1=y0-y;

Arcp1.x2=x0+y;

Arcp1.y2=y0+y;

Arcp2.x1=x0;

Arcp2.y1=y0+y;

Arcp2.x2=x0+y;

Arcp2.y2=y0;

2) Отрисовка.

Для отрисовки линий будем использовать функции MoveTo и LineTo. Для отрисовки точек будем использовать функцию Ellipse. Для отрисовки четверть окружности будем использовать функцию Arc.

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

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

MoveTo (oz.x1, oz.y1);

LineTo (oz.x2, oz.y2);

MoveTo (oy.x1, oy.y1);

LineTo (oy.x2, oy.y2);

MoveTo (ox.x1, ox.y1);

LineTo (ox.x2, ox.y2);

TextOut(oz.x2+ indent, oz.y2, “Z”);

TextOut (ox.x2, ox.y2+ indent, “X”);

TextOut (oy.x2+ indent, oy.y2+ indent, “Y”);

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

MoveTo(XoY1.x1, XoY1.y1);

LineTo(XoY1.x2, XoY1.y2);

MoveTo(XoY2.x1, XoY2.y1);

LineTo(XoY2.x2, XoY2.y2);

MoveTo(XoY3.x1, XoY3.y1);

LineTo(XoY3.x2, XoY3.y2);

MoveTo(XoZ1.x1, XoZ1.y1);

LineTo(XoZ1.x2, XoZ1.y2);

MoveTo(XoZ2.x1, XoZ2.y1);

LineTo(XoZ2.x2, XoZ2.y2);

MoveTo(XoZ3.x1, XoZ3.y1);

LineTo(XoZ3.x2, XoZ3.y2);

MoveTo(YoZ1.x1, YoZ1.y1);

LineTo(YoZ1.x2, YoZ1.y2);

MoveTo(YoZ2.x1, YoZ2.y1);

LineTo(YoZ2.x2, YoZ2.y2);

MoveTo(YoZ3.x1, YoZ3.y1);

LineTo(YoZ3.x2, YoZ3.y2);

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

Ellipse(T.x-radius, T.y - radius, T.x + radius, T.y + radius);

Ellipse(T1.x- radius, T1.y - radius, T1.x + radius , T1.y + radius);

Ellipse(T2.x- radius, T2.y - radius, T2.x + radius, T2.y + radius);

Ellipse(T3.x- radius, T3.y - radius , T3.x + radius, T3.y + radius);

TextOut(T.x+indent, T.y-indent, “P”);

TextOut(T1.x+indent, T1.y-indent, “P1”);

TextOut(T2.x+indent, T2.y-indent, “P2”);

TextOut(T3.x+indent, T3.y-indent, “P3”);

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

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

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

MoveTo (ZY.x1, ZY.y1);

LineTO(ZY.x2, ZY.y2);

MoveTo (XY.x1, XY.y1);

LineTO(XY.x2, XY.y2);

TextOut(x0+indent, indent, “Z”);

TextOut(x0+5, ZY.y2, “Y”);

TextOut(indent, y0+indent, “X”);

TextOUT(XY.x2+indent, y0+indent, “Y”);

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

MoveTo (L1.x1, L1.y1);

LineTo (L1.x2, L1.y2);

MoveTo (L2.x1, L2.y1);

LineTo (L2.x2, L2.y2);

MoveTo (L3.x1, L3.y1);

LineTo (L3.x2, L3.y2);

MoveTo (L4.x1, L4.y1);

LineTo (L4.x2, L4.y2);

MoveTo (L5.x1, L5.y1);

LineTo (L5.x2, L5.y2);

MoveTo (L6.x1, L6.y1);

LineTo (L6.x2, L6.y2);

Arc (Arcp1.x1, Arcp1.y1, Arcp1.x2, Arcp1.y2, Arcp2.x1, Arcp2.y1, Arcp2.x2, Arcp2.y2);

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

Ellipse (T1.x- radius, T1.y- radius , T1.x+ radius, T1.y+ radius);

Ellipse (T2.x- radius, T2.y- radius, T2.x+ radius, T2.y+ radius);

Ellipse (T3.x- radius, T3.y- radius, T3.x+ radius, T3.y+ radius);

TextOut(T1.x+indent, T1.y-indent, “P1”);

TextOut(T2.x+indent, T2.y-indent, “P2”);

TextOut(T3.x+indent, T3.y-indent, “P3”);

Соседние файлы в папке Лабораторные работы3