Построение проволочной 3D-модели манипулятора
Разработка алгоритма и программы построения трёхмерной проволочной модели манипулятора промышленного робота без подключения графической библиотеки. Исследование особенностей управления движением манипулятора, которое осуществляется с помощью клавиатуры.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 31.10.2016 |
Размер файла | 266,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОУ ВПО «ИЖЕВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Кафедра «Мехатронные системы»
Лабораторная работа
По дисциплине: «Информатика»
Тема: «Построение проволочной 3D-модели манипулятора»
Работу выполнил:
студент гр. 5-35б-1
Семенова Ю.А.
Работу принял:
преподаватель
Лекомцев П. В.
Ижевск 2007
Содержание
Задание
Введение
1. Разработка алгоритма
1.1 Математический алгоритм видового и перспективного преобразования
1.2 Разработка алгоритма управления движением модели
2. Разработка программы
3. Результаты вычислительного эксперимента
Список литературы
Приложение
Задание
Разработать алгоритм и программу построения трёхмерной проволочной модели манипулятора промышленного робота без подключения графической библиотеки OpenGL. Манипулятор должен выполнять 2 поступательных и 1 вращательное движение. Управление движением манипулятора осуществляется с клавиатуры.
В программе предусмотреть:
· видовое и перспективное преобразование;
· управление звеньями манипулятора при помощи клавиатуры с учётом ограничений на возможные перемещения этих звеньев;
· управление расстоянием до экрана;
· управление координатами точки наблюдения при помощи клавиатуры.
Введение
При выводе объёмного изображения на экран всегда сталкиваются со следующими сложностями: у объёмного изображения есть координата z, но экран представляет собой плоскую систему координат xy. Поэтому встаёт вопрос, как задавать третью координату. В этом случае говорят о видовом и перспективном преобразованиях.
Параллельные горизонтальные линии нарисованной фигуры (например, куба) встречаются в так называемой точке схода. Все точки схода лежат на одной прямой, которая называется линией горизонта. Линия горизонта и точка схода являются особенностью изображения и реально не существуют в трёхмерном пространстве. В течение многих веков эта концепция использовалась художниками для получения реалистичных изображений трёхмерных объектов. Такие изображения обычно называются перспективными.
Картинка зависит от положения глаза (камеры). Особо важное значение имеет расстояние между камерой и объектом, поскольку «эффект перспективы» будет обратно пропорционален этому расстоянию. Если камера расположена очень близко от объекта, то получим сильный эффект перспективы. С другой стороны, если камера расположена далеко от объекта (по сравнению с размером объекта), то параллельные линии объекта будут казаться параллельными и на картинке.
Также существует способ получения перспективных изображений на основе аналитической геометрии. При необходимости получения перспективной проекции задаётся большое количество точек Р(x,y,z), принадлежащих объекту, для которых предстоит вычислить координаты точек изображения Р/ (X,Y) на картинке. Для этого нужно только преобразовать координаты точки Р из так называемых мировых координат (x,y,z) в экранные координаты (X,Y) её центральной проекции Р/.
Отображение удобно выполнять в два этапа. Первый этап - видовое преобразование - точка Р остается на своем месте, но система мировых координат переходит в систему видовых координат. Второй этап называется перспективным преобразованием. Это точное преобразование точки Р в точку Р', объединенное с переходом из системы трехмерных видовых координат в систему двухмерных экранных координат:
Мировые координаты (xw, yw, zw)
Видовое преобразование
Видовые координаты (xe, ye, ze)
Перспективное преобразование
Экранные координаты (X, У)
После того, как проведены видовое и перспективное преобразования, возникает проблема вращения объектов.
Для этого используется матрица поворота. Далее приводится пример матрицы поворота системы координат вокруг оси z.
Матрица поворота системы координат вокруг оси z.
Разработка трёхмерной модели манипулятора поможет в дальнейшем претворить эту модель в жизнь.
1. Разработка алгоритма
Для решения поставленной задачи рассматривались следующие вопросы: вывод изображения на экран, создание матриц поворотов и управление движениями манипулятора с клавиатуры.
1.1 Математический алгоритм видового и перспективного преобразования
Объект помещается в центр мировых координат. Переход от мировых координат в экранные осуществляется в следующей форме:
Мировые координаты (xw; yw; zw)
Видовые координаты (xе; yе; zе)
Экранные координаты (x;y).
Для того, чтобы наблюдатель мог видеть объект на экране под нужным ему углом, необходимо провести видовое преобразование. Суть его заключается в том, что мировая система координат переходит в видовую, а объект остается на месте. манипулятор программа клавиатура
Видовое преобразование осуществляется формуле 1:
= V, (1)
где V - матрица видового преобразования;
V = . (2)
После видового преобразования, для реального изображения, необходимо произвести перспективное преобразование. После перспективного преобразования получаем координаты объекта в системе координат экрана, содержащей только две оси хеp и уеp.
Ниже приводятся формулы перспективного преобразования:
xеp = d; (3) yеp = d; (4)
где d - расстояние от экрана до точки наблюдения Е;
d = . (5)
1.2 Разработка алгоритма управления движением модели
Управление движением проволочной модели манипулятора производится с клавиатуры. Нажатием той или иной клавиши происходит изменение определенного параметра.
Движение схвата производится за счет изменения соответствующих координат вершин схвата, вращение звеньев вокруг осей за счет изменения углов б , в и г вращение точки наблюдения -- за счет изменения углов ц и и.
Углы измеряются в радианах.
2. Разработка программы
В соответствии с заданием данную работу необходимо было выполнить без использования графической библиотеки OpenGL. Использование последней позволяет поворачивать графические объекты с помощью готовых функций поворота. Данная программа написана в среде ТурбоСи. Были написаны матрицы поворота для возможности вращения объектов. Всего в программе присутствуют три матрицы для вращения вокруг каждой из осей. Когда координаты объекта умножаются на матрицу, результатом будут координаты объекта с учётом поворота на определённую величину. Эта величина задаётся значением синусов и косинусов в матрице.
Необходимо было построить проволочную модель, поэтому построение производилось при помощи линий.
Для осуществления поставленной задачи мы используем функцию main, в которой осуществляется управление движением, и функцию perspective, в которой осуществляется видовое и перспективное преобразование координат, а также функцию risovanie, в которой осуществляется рисование модели. А поскольку необходимо работать с графикой и тригонометрическими функциями, то к программе подключаются библиотеки graphics.h и math.h. Main -главная функция программы.
Сначала прорисовывается нижнее основание, затем верхнее основание и после нижнее соединяется с верхним.
3. Результаты вычислительного эксперимента
Для запуска программы используем ехе - файл. На экране появляется изображение проволочной модели манипулятора в первоначальном положении. Данное изображение представлено на рисунке 1. С помощью управляющих клавиш, функции которых описаны в программе, можно получить изображения манипулятора после движения.
Рисунок 1 - Окно программы.
Список литературы
1. Подбельский В. В., Фомин С. С. Программирование на языке Си: Учеб. Пособие, 2-е доп. изд. - М.: Финансы и статистика, 2003. - 600 с.: ил.
2. Сергеев А. П., Терен А. Н. Программирование в Microsoft Visual C++ 2005. Самоучитель: - М.: Издательский дом «Вильямс», 2006. - 352 с.: ил.
3. Троелсен Э. С++ и платформа .NET. - СПб.: Питер, 2006. - 796 с.
4. Шилдт Г. C++: руководство для начинающих, 2-е издание.: Пер. с англ. - М.: Издательский дом «Вильямс», 2005. - 672 с.: ил. - Парал. Тит. англ.
Приложение
#include <math.h>
#include <graphics.h>
static int gd=EGA, gm=EGAHI, t=8, n=0, y_o=0, x_o=0,z_o=0,x, r, z, alfa, Rz,
Rz2, Rz3, a, a1, a2, a3, a4, b1, b2, b3, b4, x1, x2, x3, x4, y1,
y2, y3, y4, z1, z2, dx2=0, dz=0, dz1=0, dz2=0, dz3=0, dz4=0, dz5=0,
dx=0, dx1=0, dy=0, dy2=0, dy3=0, dy4=0, colour=0;
static float v11, v12, v13, v21, v22, v23, v32, v33, v43, screen_dist=5500,
cx=320, cy=200;
static float th, ph, factor=0.017453, rho=10000, theta=20, phi=-70, h=100,
c1=1, c2=1, c3=1, s1=0, s2=0, s3=0;
//************************************************************************
//************************************************************************
void coeff(float rho,float theta,float phi)
{
th=theta*factor; ph=phi*factor;
v11=-sin(th); v12=-cos(ph)*cos(th);v13=-sin(ph)*cos(th);
v21=cos(th); v22=-cos(ph)*sin(th);v23=-sin(ph)*sin(th);
v32=sin(ph);v33=-cos(ph); v43=rho;
}
//---------------------------------------------------
void perspective(int x,int y,int z,int* pX,int* pY)
{ /* Eye coordinates*/
float xe = v11*x + v21*y;
float ye = v12*x + v22*y + v32*z;
float ze = v13*x + v23*y + v33*z + v43;
/* Screen coordinates */
*pX = screen_dist*xe/ze + cx;
*pY = screen_dist*ye/ze + cy;
}
//---------------------------------------------------
void mv(int x, int y, int z)
{
int X, Y;
perspective(x, y, z, &X, &Y);
moveto (X, Y);
}
//---------------------------------------------------
void dw(float x, float y, float z)
{int X, Y;
perspective(x, y, z, &X, &Y);
lineto(X, Y);
}
//---------------------------------------------------
void parallelepiped(void)
//vraschenie vokrug osi z
{
mv(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z1+dz);
dw(x_o + (a2-x_o)*s2+(b2-y_o)*c2, y_o + (a2-x_o)*(-c2)+(b2-y_o)*s2, z1+dz);/* draw
AB */
dw(x_o + (a3-x_o)*s2+(b3-y_o)*c2, y_o + (a3-x_o)*(-c2)+(b3-y_o)*s2, z1+dz);/* draw BC*/
dw(x_o + (a3-x_o)*s2+(b3-y_o)*c2, y_o + (a3-x_o)*(-c2)+(b3-y_o)*s2, z2+dz);/* draw CG */
dw(x_o + (a4-x_o)*s2+(b4-y_o)*c2, y_o + (a4-x_o)*(-c2)+(b4-y_o)*s2, z2+dz);/* draw GH */
dw(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z2+dz);/* draw HE */
dw(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z1+dz);/* draw EA */
mv(x_o + (a2-x_o)*s2+(b2-y_o)*c2, y_o + (a2-x_o)*(-c2)+(b2-y_o)*s2, z1+dz);
dw(x_o + (a2-x_o)*s2+(b2-y_o)*c2, y_o + (a2-x_o)*(-c2)+(b2-y_o)*s2, z2+dz);/* draw BF */
dw(x_o + (a3-x_o)*s2+(b3-y_o)*c2, y_o + (a3-x_o)*(-c2)+(b3-y_o)*s2, z2+dz);/* draw FG */
mv(x_o + (a2-x_o)*s2+(b2-y_o)*c2, y_o + (a2-x_o)*(-c2)+(b2-y_o)*s2, z2+dz);
dw(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z2+dz);/* draw FE */
mv(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z1+dz);
dw(x_o + (a4-x_o)*s2+(b4-y_o)*c2, y_o + (a4-x_o)*(-c2)+(b4-y_o)*s2, z1+dz);/* draw AD */
dw(x_o + (a3-x_o)*s2+(b3-y_o)*c2, y_o + (a3-x_o)*(-c2)+(b3-y_o)*s2, z1+dz);/* draw DC */
mv(x_o + (a4-x_o)*s2+(b4-y_o)*c2, y_o + (a4-x_o)*(-c2)+(b4-y_o)*s2, z1+dz);
dw(x_o + (a4-x_o)*s2+(b4-y_o)*c2, y_o + (a4-x_o)*(-c2)+(b4-y_o)*s2, z2+dz);/* draw DH */
}
void parallelepiped12(void)
//vraschenie dla detali
{
mv(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z1+dz2);
dw(x_o + (a2-x_o)*s3+(b2-y_o)*c3, y_o + (a2-x_o)*(-c3)+(b2-y_o)*s3, z1+dz2);/* draw AB */
dw(x_o + (a3-x_o)*s3+(b3-y_o)*c3, y_o + (a3-x_o)*(-c3)+(b3-y_o)*s3, z1+dz2);/* draw BC*/
dw(x_o + (a3-x_o)*s3+(b3-y_o)*c3, y_o + (a3-x_o)*(-c3)+(b3-y_o)*s3, z2+dz2);/* draw CG */
dw(x_o + (a4-x_o)*s3+(b4-y_o)*c3, y_o + (a4-x_o)*(-c3)+(b4-y_o)*s3, z2+dz2);/* draw GH */
dw(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z2+dz2);/* draw HE */
dw(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z1+dz2);/* draw EA */
mv(x_o + (a2-x_o)*s3+(b2-y_o)*c3, y_o + (a2-x_o)*(-c3)+(b2-y_o)*s3, z1+dz2);
dw(x_o + (a2-x_o)*s3+(b2-y_o)*c3, y_o + (a2-x_o)*(-c3)+(b2-y_o)*s3, z2+dz2);/* draw BF */
dw(x_o + (a3-x_o)*s3+(b3-y_o)*c3, y_o + (a3-x_o)*(-c3)+(b3-y_o)*s3, z2+dz2);/* draw FG */
mv(x_o + (a2-x_o)*s3+(b2-y_o)*c3, y_o + (a2-x_o)*(-c3)+(b2-y_o)*s3, z2+dz2);
dw(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z2+dz2);/* draw FE */
mv(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z1+dz2);
dw(x_o + (a4-x_o)*s3+(b4-y_o)*c3, y_o + (a4-x_o)*(-c3)+(b4-y_o)*s3, z1+dz2);/* draw AD */
dw(x_o + (a3-x_o)*s3+(b3-y_o)*c3, y_o + (a3-x_o)*(-c3)+(b3-y_o)*s3, z1+dz2);/* draw DC */
mv(x_o + (a4-x_o)*s3+(b4-y_o)*c3, y_o + (a4-x_o)*(-c3)+(b4-y_o)*s3, z1+dz2);
dw(x_o + (a4-x_o)*s3+(b4-y_o)*c3, y_o + (a4-x_o)*(-c3)+(b4-y_o)*s3, z2+dz2);/* draw DH */
}
void parallelepiped2(void)
//vraschenie vokrug osi x
{
mv(x1, y_o + (y1-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y1-y_o)*s1+(z1-z_o)*(-c1));
dw(x2, y_o + (y2-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y2-y_o)*s1+(z1-z_o)*(-c1));
dw(x3, y_o + (y3-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y3-y_o)*s1+(z1-z_o)*(-c1));
dw(x3, y_o + (y3-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y3-y_o)*s1+(z2-z_o)*(-c1));
dw(x4, y_o + (y4-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y4-y_o)*s1+(z2-z_o)*(-c1));
dw(x1, y_o + (y1-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y1-y_o)*s1+(z2-z_o)*(-c1));
dw(x1, y_o + (y1-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y1-y_o)*s1+(z1-z_o)*(-c1));
mv(x2, y_o + (y2-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y2-y_o)*s1+(z1-z_o)*(-c1));
dw(x2, y_o + (y2-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y2-y_o)*s1+(z2-z_o)*(-c1));
dw(x3, y_o + (y3-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y3-y_o)*s1+(z2-z_o)*(-c1));
mv(x2, y_o + (y2-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y2-y_o)*s1+(z2-z_o)*(-c1));
dw(x1, y_o + (y1-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y1-y_o)*s1+(z2-z_o)*(-c1));
mv(x1, y_o + (y1-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y1-y_o)*s1+(z1-z_o)*(-c1));
dw(x4, y_o + (y4-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y4-y_o)*s1+(z1-z_o)*(-c1));
dw(x3, y_o + (y3-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y3-y_o)*s1+(z1-z_o)*(-c1));
mv(x4, y_o + (y4-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y4-y_o)*s1+(z1-z_o)*(-c1));
dw(x4, y_o + (y4-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y4-y_o)*s1+(z2-z_o)*(-c1));
}
void parallelepiped3(void)
//vraschenie vokrug osi y
{
mv(x_o + (x1-x_o)*c1+(z1-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z1-z_o)*c1);
dw(x_o + (x2-x_o)*c1+(z1-z_o)*s1, y2, z_o + (x2-x_o)*(-s1)+(z1-z_o)*c1);
dw(x_o + (x3-x_o)*c1+(z1-z_o)*s1, y3, z_o + (x3-x_o)*(-s1)+(z1-z_o)*c1);
dw(x_o + (x3-x_o)*c1+(z2-z_o)*s1, y3, z_o + (x3-x_o)*(-s1)+(z2-z_o)*c1);
dw(x_o + (x4-x_o)*c1+(z2-z_o)*s1, y4, z_o + (x4-x_o)*(-s1)+(z2-z_o)*c1);
dw(x_o + (x1-x_o)*c1+(z2-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z2-z_o)*(c1));
dw(x_o + (x1-x_o)*c1+(z1-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z1-z_o)*(c1));
mv(x_o + (x2-x_o)*c1+(z1-z_o)*s1, y2, z_o + (x2-x_o)*(-s1)+(z1-z_o)*(c1));
dw(x_o + (x2-x_o)*c1+(z2-z_o)*s1, y2, z_o + (x2-x_o)*(-s1)+(z2-z_o)*(c1));
dw(x_o + (x3-x_o)*c1+(z2-z_o)*s1, y3, z_o + (x3-x_o)*(-s1)+(z2-z_o)*(c1));
mv(x_o + (x2-x_o)*c1+(z2-z_o)*s1, y2, z_o + (x2-x_o)*(-s1)+(z2-z_o)*(c1));
dw(x_o + (x1-x_o)*c1+(z2-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z2-z_o)*(c1));
mv(x_o + (x1-x_o)*c1+(z1-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z1-z_o)*(c1));
dw(x_o + (x4-x_o)*c1+(z1-z_o)*s1, y4, z_o + (x4-x_o)*(-s1)+(z1-z_o)*(c1));
dw(x_o + (x3-x_o)*c1+(z1-z_o)*s1, y3, z_o + (x3-x_o)*(-s1)+(z1-z_o)*(c1));
mv(x_o + (x4-x_o)*c1+(z1-z_o)*s1, y4, z_o + (x4-x_o)*(-s1)+(z1-z_o)*(c1));
dw(x_o + (x4-x_o)*c1+(z2-z_o)*s1, y4, z_o + (x4-x_o)*(-s1)+(z2-z_o)*(c1));
}
void obrazujuschaja(void)
{
mv(x_o + (x-x_o)*c1+(z-z_o)*s1, y1, z_o + (x-x_o)*(-s1)+(z-z_o)*c1);
dw(x_o + (x-x_o)*c1+(z-z_o)*s1, y2, z_o + (x-x_o)*(-s1)+(z-z_o)*c1);
}
//---------------------------------------------------
void drawing(void)
{
coeff (rho, theta, phi);
setcolor(WHITE);
outtextxy(215,10,"Press 1 to start animation");
if(colour!=0) setcolor(LIGHTBLUE);
//zveno1
mv(0,0,0);dw(0,60,0);
dw(60,60,0);dw(60,0,0);
dw(0,0,0); dw(0,0,150+dz);
dw(0,60,150+dz);dw(60,60,150+dz);
dw(60,0,150+dz);dw(0,0,150+dz);
mv(0,60,0);dw(0,60,150+dz);
mv(60,60,0);dw(60,60,150+dz);
mv(60,0,0);dw(60,0,150+dz);
if(colour!=0) setcolor(LIGHTBLUE);
//zveno2
a1=0; b1=0;
a2=200+dx1;b2=0;
a3=200+dx1;b3=60;
a4=0;b4=60;
z1=150; z2=180;
x_o=30;y_o=30;
parallelepiped();
//grip
if(colour!=0) setcolor(LIGHTMAGENTA);
//right section
a1=200+dx1;b1=0+dx;
a2=200+dx1;b2=10+dx;
a3=230+dx1;b3=10+dx;
a4=230+dx1;b4=0+dx;
parallelepiped();
// left section
a1=200+dx1;b1=50-dx;
a2=200+dx1;b2=60-dx;
a3=230+dx1;b3=60-dx;
a4=230+dx1;b4=50-dx;
parallelepiped();
if(colour!=0) setcolor(GREEN);
//stanina11
mv(-240,150,0);dw(-240,240,0);
dw(-120,240,0);dw(-120,150,0);
dw(-240,150,0);dw(-240,150,150);
dw(-240,240,150);dw(-120,240,150);
dw(-120,150,150);dw(-240,150,150);
mv(-240,240,0);dw(-240,240,150);
mv(-120,240,0);dw(-120,240,150);
mv(-120,150,0);dw(-120,150,150);
//stanina12
mv(-240,-120,0);dw(-240,-210,0);
dw(-120,-210,0);dw(-120,-120,0);
dw(-240,-120,0);dw(-240,-120,150);
dw(-240,-210,150);dw(-120,-210,150);
dw(-120,-120,150);dw(-240,-120,150);
mv(-240,-210,0);dw(-240,-210,150);
mv(-120,-210,0);dw(-120,-210,150);
mv(-120,-120,0);dw(-120,-120,150);
//stanina13
mv(-240,150,40);dw(-240,-120,40);
dw(-120,-120,40);dw(-120,150,40);
dw(-240,150,40);dw(-240,150,60);
dw(-240,-120,60);dw(-120,-120,60);
dw(-120,150,60);dw(-240,150,60);
mv(-240,-120,40);dw(-240,-120,60);
mv(-120,-120,40);dw(-120,-120,60);
mv(-120,150,40);dw(-120,150,60);
if(colour!=0) setcolor(RED);
//patron
x=-180; r=20; z=110;
mv(x+r,150,z);
for(alfa=0;alfa<=720;alfa++)
dw(x+r*cos(alfa*3.14/360),150,z+r*sin(alfa*3.14/360));
mv(x+r,100,z);
for(alfa=0;alfa<=720;alfa++)
dw(x+r*cos(alfa*3.14/360),100,z+r*sin(alfa*3.14/360));
x_o=-180;z_o=110;
y1=100; y2=150; x+=r;
obrazujuschaja();
x-=2*r;
obrazujuschaja();
x=-180; z+=r;
obrazujuschaja();
z-=2*r;
obrazujuschaja();
if(colour!=0) setcolor(LIGHTRED);
//babina
mv(-210,0+dy2,90);dw(-210,-120,90);
dw(-150,-120,90);dw(-150,0+dy2,90);
dw(-210,0+dy2,90);dw(-210,0+dy2,130);
dw(-210,-120,130);dw(-150,-120,130);
dw(-150,0+dy2,130);dw(-210,0+dy2,130);
mv(-210,-120,90);dw(-210,-120,130);
mv(-150,-120,90);dw(-150,-120,130);
mv(-150,0+dy2,90);dw(-150,0+dy2,130);
if(colour!=0) setcolor(MAGENTA);
//pod babinoj
mv(-200,50,60);dw(-200,10,60);
dw(-160,10,60);dw(-160,50,60);
dw(-200,50,60);dw(-200,50,80+dz4);
dw(-200,10,80+dz4);dw(-160,10,80+dz4);
dw(-160,50,80+dz4);dw(-200,50,80+dz4);
mv(-200,10,60);dw(-200,10,80+dz4);
mv(-160,10,60);dw(-160,10,80+dz4);
mv(-160,50,60);dw(-160,50,80+dz4);
if(colour!=0) setcolor(YELLOW);
//osnovanie rezca
mv(-200,110,60);dw(-200,70,60);
dw(-160,70,60);dw(-160,110,60);
dw(-200,110,60);dw(-200,110,80);
dw(-200,70,80);dw(-160,70,80);
dw(-160,110,80);dw(-200,110,80);
mv(-200,70,60);dw(-200,70,80);
mv(-160,70,60);dw(-160,70,80);
mv(-160,110,60);dw(-160,110,80);
//rezec
mv(-185,95,80);dw(-185,85,80);
dw(-175,85,80);dw(-175,95,80);
dw(-185,95,80);dw(-185,95,110);
dw(-185,85,100);dw(-175,85,100);
dw(-175,95,100);dw(-185,95,100);
mv(-185,85,80);dw(-185,85,100);
mv(-175,85,80);dw(-175,85,100);
mv(-175,95,80);dw(-175,95,100);
//konveyer
if(colour!=0) setcolor(BLUE);
mv(240,-950,0);dw(240,940,0);
dw(120,940,0);dw(120,-950,0);
dw(240,-950,0);dw(240,-950,60);
dw(240,940,60);dw(120,940,60);
dw(120,-950,60);dw(240,-950,60);
mv(240,940,0);dw(240,940,60);
mv(120,940,0);dw(120,940,60);
mv(120,-950,0);dw(120,-950,60);
}
void detal1(void)
{
if(colour!=0) setcolor(LIGHTGREEN);
mv(190,-950+dy,60+dz1);dw(190,-930+dy,60+dz1);
dw(170,-930+dy,60+dz1);dw(170,-950+dy,60+dz1);
dw(190,-950+dy,60+dz1);dw(190,-950+dy,80+dz1);
dw(190,-930+dy,80+dz1);dw(170,-930+dy,80+dz1);
dw(170,-950+dy,80+dz1);dw(190,-950+dy,80+dz1);
mv(190,-930+dy,60+dz1);dw(190,-930+dy,80+dz1);
mv(170,-930+dy,60+dz1);dw(170,-930+dy,80+dz1);
mv(170,-950+dy,60+dz1);dw(170,-950+dy,80+dz1);
}
void detal2(void)
{
if(colour!=0) setcolor(LIGHTGREEN);
a1=20+dx2; b1=190+dy3;
a2=20+dx2; b2=170+dy3;
a3=40+dx2; b3=170+dy3;
a4=40+dx2; b4=190+dy3;
x_o=30;y_o=30;
z1=140+dz3+dz5;z2=160+dz3+dz5;
parallelepiped12();
}
void detal3(void)
{
if(colour!=0) setcolor(LIGHTGREEN);
x1=-190; y1=100;
x2=-190; y2=80;
x3=-170; y3=80;
x4=-170; y4=100;
x_o=-180;z_o=110;
z1=100;z2=120;
parallelepiped3();
}
//-----------------------------------------
void rotate_1(void)
{
c1=cos(Rz*factor);
s1=sin(Rz*factor);
}
//-----------------------------------------
void rotate_2(void)
{
s2=sin(Rz2*factor);
c2=cos(Rz2*factor);
}
void rotate_3(void)
{s3=sin(Rz3*factor);
c3=cos(Rz3*factor);
}
//-----------------------------------------
void stcolour(void)
{
colour=colour^1;
}
//?????????????????????????????????????????
void risovanie(void)
{
setactivepage(n);
cleardevice();
drawing();
detal1();
setvisualpage(n);
n=n^1;
}
void risovanie2(void)
{
setactivepage(n);
cleardevice();
drawing();
detal2();
setvisualpage(n);
n=n^1;
}
void risovanie3(void)
{
setactivepage(n);
cleardevice();
drawing();
detal3();
setvisualpage(n);
n=n^1;
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
void main(void)
{
initgraph (&gd,&gm,"");
do
{
risovanie();
t=getch();
switch (t)
{
case '1':for(dy=0;dy<969;dy+=5)risovanie();
for(dx1=0;dx1>-35;dx1-=3) risovanie();
for(Rz2=0;Rz2<91;Rz2+=3)
{
rotate_2();
risovanie();
}
for(dz=0;dz>-80;dz-=3) risovanie();
for(dx=0;dx<9;dx+=2) risovanie();
for(dz=-80,dz1=0;dz<0,dz1<80;dz+=3,dz1+=3) risovanie();
for(Rz2=90,Rz3=0;Rz2>-91;Rz2-=3,Rz3-=3)
{
rotate_2(); rotate_3(); risovanie2();
}
for(dx1=-35;dx1<25;dx1+=3,dy3+=3) risovanie2();
for(dz=0;dz>-60;dz-=3,dz3-=3) risovanie2();
for(dx=9;dx>0;dx-=2) risovanie2();
for(dz=-60;dz<0;dz+=3) risovanie2();
for(dz4=0;dz4<20;dz4+=3,dz5+=3) risovanie2();
for(dy2=0;dy2<10;dy2+=3,dx2-=3) risovanie2();
for(dz4=20;dz4>0;dz4--) risovanie2();
for(dy2=10;dy2<80;dy2+=3,dx2+=3) risovanie2();
for(Rz=0;Rz<10000;Rz+=100)
{
rotate_1(); risovanie3();
}
for(dy2=80;dy2>10;dy2-=3,dx2-=3) risovanie2();
for(dz4=0;dz4<20;dz4++) risovanie2();
for(dy2=10;dy2>0;dy2-=3,dx2+=3) risovanie2();
for(dz4=20;dz4>0;dz4-=3,dz5-=3) risovanie2();
for(dz=0;dz>-60;dz-=3) risovanie2();
for(dx=0;dx<9;dx+=2) risovanie2();
for(dz=-60;dz<0;dz+=3,dz3+=3) risovanie2();
for(Rz2=-91,Rz3=-181;Rz2<90;Rz2+=3,Rz3+=3)
{
rotate_2();rotate_3(); risovanie2();
}
for(dx1=dx1;dx1>-35;dx1-=3,dy3-=3) risovanie2();
for(dz=dz;dz>-80;dz-=3,dz1-=3) risovanie();
for(dx=9;dx>0;dx-=2) risovanie();
for(dz=-80;dz<0;dz+=3) risovanie();
for(dy=969;dy<1869;dy+=5) risovanie();
case 't': if(Rz3>-91){ Rz3-=2;Rz2-=2; rotate_2();rotate_3();} break;
case '4': theta+=4; break;
case '6': theta-=4; break;
case '8': phi+=4; break;
case '2': phi-=4; break;
case '+': if(screen_dist<10000) screen_dist+=100; break;
case '-': if(screen_dist>0) screen_dist-=100; break;
case 'n': if(dz>-90) dz-=3; break;
case 'm': if(dz<90) dz+=3; break;
case 'q': cx-=3; break;
case 'w': cx+=3; break;
case 'a': cy-=3; break;
case 's': cy+=3; break;
case 'e': if(dx<20) dx+=2; break;
case 'r': if(dx>0) dx-=2; break;
case '.': if(dy<1500) dy+=3; break;
case ',': if(dy>0) dy-=3; break;
case 'd': if(dy2>0) dy2-=3; break;
case 'f': if(dy2<100) dy2+=3; break;
case 'l': if(Rz2>-90) Rz2-=3; rotate_2(); break;
case 'k': if(Rz2<90) Rz2+=3; rotate_2(); break;
case 'v': Rz-=33; rotate_1(); break;
case 'b': Rz+=33; rotate_1(); break;
case 'c': stcolour(); break;
case 'z': if(dx1<1500) dx1+=3; break;
}
}
while (t!=0x1b);
closegraph();
}#include <math.h>
#include <graphics.h>
static int gd=EGA, gm=EGAHI, t=8, n=0, y_o=0, x_o=0,z_o=0,x, r, z, alfa, Rz,
Rz2, Rz3, a, a1, a2, a3, a4, b1, b2, b3, b4, x1, x2, x3, x4, y1,
y2, y3, y4, z1, z2, dx2=0, dz=0, dz1=0, dz2=0, dz3=0, dz4=0, dz5=0,
dx=0, dx1=0, dy=0, dy2=0, dy3=0, dy4=0, colour=0;
static float v11, v12, v13, v21, v22, v23, v32, v33, v43, screen_dist=5500,
cx=320, cy=200;
static float th, ph, factor=0.017453, rho=10000, theta=20, phi=-70, h=100,
c1=1, c2=1, c3=1, s1=0, s2=0, s3=0;
//************************************************************************
//************************************************************************
void coeff(float rho,float theta,float phi)
{
th=theta*factor; ph=phi*factor;
v11=-sin(th); v12=-cos(ph)*cos(th);v13=-sin(ph)*cos(th);
v21=cos(th); v22=-cos(ph)*sin(th);v23=-sin(ph)*sin(th);
v32=sin(ph);v33=-cos(ph); v43=rho;
}
//---------------------------------------------------
void perspective(int x,int y,int z,int* pX,int* pY)
{ /* Eye coordinates*/
float xe = v11*x + v21*y;
float ye = v12*x + v22*y + v32*z;
float ze = v13*x + v23*y + v33*z + v43;
/* Screen coordinates */
*pX = screen_dist*xe/ze + cx;
*pY = screen_dist*ye/ze + cy;
}
//---------------------------------------------------
void mv(int x, int y, int z)
{
int X, Y;
perspective(x, y, z, &X, &Y);
moveto (X, Y);
}
//---------------------------------------------------
void dw(float x, float y, float z)
{int X, Y;
perspective(x, y, z, &X, &Y);
lineto(X, Y);
}
//---------------------------------------------------
void parallelepiped(void)
//vraschenie vokrug osi z
{
mv(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z1+dz);
dw(x_o + (a2-x_o)*s2+(b2-y_o)*c2, y_o + (a2-x_o)*(-c2)+(b2-y_o)*s2, z1+dz);/* draw AB */
dw(x_o + (a3-x_o)*s2+(b3-y_o)*c2, y_o + (a3-x_o)*(-c2)+(b3-y_o)*s2, z1+dz);/* draw BC*/
dw(x_o + (a3-x_o)*s2+(b3-y_o)*c2, y_o + (a3-x_o)*(-c2)+(b3-y_o)*s2, z2+dz);/* draw CG */
dw(x_o + (a4-x_o)*s2+(b4-y_o)*c2, y_o + (a4-x_o)*(-c2)+(b4-y_o)*s2, z2+dz);/* draw GH */
dw(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z2+dz);/* draw HE */
dw(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z1+dz);/* draw EA */
mv(x_o + (a2-x_o)*s2+(b2-y_o)*c2, y_o + (a2-x_o)*(-c2)+(b2-y_o)*s2, z1+dz);
dw(x_o + (a2-x_o)*s2+(b2-y_o)*c2, y_o + (a2-x_o)*(-c2)+(b2-y_o)*s2, z2+dz);/* draw BF */
dw(x_o + (a3-x_o)*s2+(b3-y_o)*c2, y_o + (a3-x_o)*(-c2)+(b3-y_o)*s2, z2+dz);/* draw FG */
mv(x_o + (a2-x_o)*s2+(b2-y_o)*c2, y_o + (a2-x_o)*(-c2)+(b2-y_o)*s2, z2+dz);
dw(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z2+dz);/* draw FE */
mv(x_o + (a1-x_o)*s2+(b1-y_o)*c2, y_o + (a1-x_o)*(-c2)+(b1-y_o)*s2, z1+dz);
dw(x_o + (a4-x_o)*s2+(b4-y_o)*c2, y_o + (a4-x_o)*(-c2)+(b4-y_o)*s2, z1+dz);/* draw AD */
dw(x_o + (a3-x_o)*s2+(b3-y_o)*c2, y_o + (a3-x_o)*(-c2)+(b3-y_o)*s2, z1+dz);/* draw DC */
mv(x_o + (a4-x_o)*s2+(b4-y_o)*c2, y_o + (a4-x_o)*(-c2)+(b4-y_o)*s2, z1+dz);
dw(x_o + (a4-x_o)*s2+(b4-y_o)*c2, y_o + (a4-x_o)*(-c2)+(b4-y_o)*s2, z2+dz);/* draw DH */
}
void parallelepiped12(void)
//vraschenie dla detali
{
mv(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z1+dz2);
dw(x_o + (a2-x_o)*s3+(b2-y_o)*c3, y_o + (a2-x_o)*(-c3)+(b2-y_o)*s3, z1+dz2);/* draw AB */
dw(x_o + (a3-x_o)*s3+(b3-y_o)*c3, y_o + (a3-x_o)*(-c3)+(b3-y_o)*s3, z1+dz2);/* draw BC*/
dw(x_o + (a3-x_o)*s3+(b3-y_o)*c3, y_o + (a3-x_o)*(-c3)+(b3-y_o)*s3, z2+dz2);/* draw CG */
dw(x_o + (a4-x_o)*s3+(b4-y_o)*c3, y_o + (a4-x_o)*(-c3)+(b4-y_o)*s3, z2+dz2);/* draw GH */
dw(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z2+dz2);/* draw
HE */
dw(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z1+dz2);/* draw EA */
mv(x_o + (a2-x_o)*s3+(b2-y_o)*c3, y_o + (a2-x_o)*(-c3)+(b2-y_o)*s3, z1+dz2);
dw(x_o + (a2-x_o)*s3+(b2-y_o)*c3, y_o + (a2-x_o)*(-c3)+(b2-y_o)*s3, z2+dz2);/* draw BF */
dw(x_o + (a3-x_o)*s3+(b3-y_o)*c3, y_o + (a3-x_o)*(-c3)+(b3-y_o)*s3, z2+dz2);/* draw FG */
mv(x_o + (a2-x_o)*s3+(b2-y_o)*c3, y_o + (a2-x_o)*(-c3)+(b2-y_o)*s3, z2+dz2);
dw(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z2+dz2);/* draw FE */
mv(x_o + (a1-x_o)*s3+(b1-y_o)*c3, y_o + (a1-x_o)*(-c3)+(b1-y_o)*s3, z1+dz2);
dw(x_o + (a4-x_o)*s3+(b4-y_o)*c3, y_o + (a4-x_o)*(-c3)+(b4-y_o)*s3, z1+dz2);/* draw AD */
dw(x_o + (a3-x_o)*s3+(b3-y_o)*c3, y_o + (a3-x_o)*(-c3)+(b3-y_o)*s3, z1+dz2);/* draw DC */
mv(x_o + (a4-x_o)*s3+(b4-y_o)*c3, y_o + (a4-x_o)*(-c3)+(b4-y_o)*s3, z1+dz2);
dw(x_o + (a4-x_o)*s3+(b4-y_o)*c3, y_o + (a4-x_o)*(-c3)+(b4-y_o)*s3, z2+dz2);/* draw DH */
}
void parallelepiped2(void)
//vraschenie vokrug osi x
{
mv(x1, y_o + (y1-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y1-y_o)*s1+(z1-z_o)*(-c1));
dw(x2, y_o + (y2-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y2-y_o)*s1+(z1-z_o)*(-c1));
dw(x3, y_o + (y3-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y3-y_o)*s1+(z1-z_o)*(-c1));
dw(x3, y_o + (y3-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y3-y_o)*s1+(z2-z_o)*(-c1));
dw(x4, y_o + (y4-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y4-y_o)*s1+(z2-z_o)*(-c1));
dw(x1, y_o + (y1-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y1-y_o)*s1+(z2-z_o)*(-c1));
dw(x1, y_o + (y1-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y1-y_o)*s1+(z1-z_o)*(-c1));
mv(x2, y_o + (y2-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y2-y_o)*s1+(z1-z_o)*(-c1));
dw(x2, y_o + (y2-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y2-y_o)*s1+(z2-z_o)*(-c1));
dw(x3, y_o + (y3-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y3-y_o)*s1+(z2-z_o)*(-c1));
mv(x2, y_o + (y2-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y2-y_o)*s1+(z2-z_o)*(-c1));
dw(x1, y_o + (y1-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y1-y_o)*s1+(z2-z_o)*(-c1));
mv(x1, y_o + (y1-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y1-y_o)*s1+(z1-z_o)*(-c1));
dw(x4, y_o + (y4-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y4-y_o)*s1+(z1-z_o)*(-c1));
dw(x3, y_o + (y3-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y3-y_o)*s1+(z1-z_o)*(-c1));
mv(x4, y_o + (y4-y_o)*(-c1)+(z1-z_o)*(-s1), z_o + (y4-y_o)*s1+(z1-z_o)*(-c1));
dw(x4, y_o + (y4-y_o)*(-c1)+(z2-z_o)*(-s1), z_o + (y4-y_o)*s1+(z2-z_o)*(-c1));
}
void parallelepiped3(void)
//vraschenie vokrug osi y
{
mv(x_o + (x1-x_o)*c1+(z1-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z1-z_o)*c1);
dw(x_o + (x2-x_o)*c1+(z1-z_o)*s1, y2, z_o + (x2-x_o)*(-s1)+(z1-z_o)*c1);
dw(x_o + (x3-x_o)*c1+(z1-z_o)*s1, y3, z_o + (x3-x_o)*(-s1)+(z1-z_o)*c1);
dw(x_o + (x3-x_o)*c1+(z2-z_o)*s1, y3, z_o + (x3-x_o)*(-s1)+(z2-z_o)*c1);
dw(x_o + (x4-x_o)*c1+(z2-z_o)*s1, y4, z_o + (x4-x_o)*(-s1)+(z2-z_o)*c1);
dw(x_o + (x1-x_o)*c1+(z2-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z2-z_o)*(c1));
dw(x_o + (x1-x_o)*c1+(z1-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z1-z_o)*(c1));
mv(x_o + (x2-x_o)*c1+(z1-z_o)*s1, y2, z_o + (x2-x_o)*(-s1)+(z1-z_o)*(c1));
dw(x_o + (x2-x_o)*c1+(z2-z_o)*s1, y2, z_o + (x2-x_o)*(-s1)+(z2-z_o)*(c1));
dw(x_o + (x3-x_o)*c1+(z2-z_o)*s1, y3, z_o + (x3-x_o)*(-s1)+(z2-z_o)*(c1));
mv(x_o + (x2-x_o)*c1+(z2-z_o)*s1, y2, z_o + (x2-x_o)*(-s1)+(z2-z_o)*(c1));
dw(x_o + (x1-x_o)*c1+(z2-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z2-z_o)*(c1));
mv(x_o + (x1-x_o)*c1+(z1-z_o)*s1, y1, z_o + (x1-x_o)*(-s1)+(z1-z_o)*(c1));
dw(x_o + (x4-x_o)*c1+(z1-z_o)*s1, y4, z_o + (x4-x_o)*(-s1)+(z1-z_o)*(c1));
dw(x_o + (x3-x_o)*c1+(z1-z_o)*s1, y3, z_o + (x3-x_o)*(-s1)+(z1-z_o)*(c1));
mv(x_o + (x4-x_o)*c1+(z1-z_o)*s1, y4, z_o + (x4-x_o)*(-s1)+(z1-z_o)*(c1));
dw(x_o + (x4-x_o)*c1+(z2-z_o)*s1, y4, z_o + (x4-x_o)*(-s1)+(z2-z_o)*(c1));
}
void obrazujuschaja(void)
{
mv(x_o + (x-x_o)*c1+(z-z_o)*s1, y1, z_o + (x-x_o)*(-s1)+(z-z_o)*c1);
dw(x_o + (x-x_o)*c1+(z-z_o)*s1, y2, z_o + (x-x_o)*(-s1)+(z-z_o)*c1);
}
//---------------------------------------------------
void drawing(void)
{
coeff (rho, theta, phi);
setcolor(WHITE);
outtextxy(215,10,"Press 1 to start animation");
if(colour!=0) setcolor(LIGHTBLUE);
//zveno1
mv(0,0,0);dw(0,60,0);
dw(60,60,0);dw(60,0,0);
dw(0,0,0); dw(0,0,150+dz);
dw(0,60,150+dz);dw(60,60,150+dz);
dw(60,0,150+dz);dw(0,0,150+dz);
mv(0,60,0);dw(0,60,150+dz);
mv(60,60,0);dw(60,60,150+dz);
mv(60,0,0);dw(60,0,150+dz);
if(colour!=0) setcolor(LIGHTBLUE);
//zveno2
a1=0; b1=0;
a2=200+dx1;b2=0;
a3=200+dx1;b3=60;
a4=0;b4=60;
z1=150; z2=180;
x_o=30;y_o=30;
parallelepiped();
//grip
if(colour!=0) setcolor(LIGHTMAGENTA);
//right section
a1=200+dx1;b1=0+dx;
a2=200+dx1;b2=10+dx;
a3=230+dx1;b3=10+dx;
a4=230+dx1;b4=0+dx;
parallelepiped();
// left section
a1=200+dx1;b1=50-dx;
a2=200+dx1;b2=60-dx;
a3=230+dx1;b3=60-dx;
a4=230+dx1;b4=50-dx;
parallelepiped();
if(colour!=0) setcolor(GREEN);
//stanina11
mv(-240,150,0);dw(-240,240,0);
dw(-120,240,0);dw(-120,150,0);
dw(-240,150,0);dw(-240,150,150);
dw(-240,240,150);dw(-120,240,150);
dw(-120,150,150);dw(-240,150,150);
mv(-240,240,0);dw(-240,240,150);
mv(-120,240,0);dw(-120,240,150);
mv(-120,150,0);dw(-120,150,150);
//stanina12
mv(-240,-120,0);dw(-240,-210,0);
dw(-120,-210,0);dw(-120,-120,0);
dw(-240,-120,0);dw(-240,-120,150);
dw(-240,-210,150);dw(-120,-210,150);
dw(-120,-120,150);dw(-240,-120,150);
mv(-240,-210,0);dw(-240,-210,150);
mv(-120,-210,0);dw(-120,-210,150);
mv(-120,-120,0);dw(-120,-120,150);
//stanina13
mv(-240,150,40);dw(-240,-120,40);
dw(-120,-120,40);dw(-120,150,40);
dw(-240,150,40);dw(-240,150,60);
dw(-240,-120,60);dw(-120,-120,60);
dw(-120,150,60);dw(-240,150,60);
mv(-240,-120,40);dw(-240,-120,60);
mv(-120,-120,40);dw(-120,-120,60);
mv(-120,150,40);dw(-120,150,60);
if(colour!=0) setcolor(RED);
//patron
x=-180; r=20; z=110;
mv(x+r,150,z);
for(alfa=0;alfa<=720;alfa++)
dw(x+r*cos(alfa*3.14/360),150,z+r*sin(alfa*3.14/360));
mv(x+r,100,z);
for(alfa=0;alfa<=720;alfa++)
dw(x+r*cos(alfa*3.14/360),100,z+r*sin(alfa*3.14/360));
x_o=-180;z_o=110;
y1=100; y2=150; x+=r;
obrazujuschaja();
x-=2*r;
obrazujuschaja();
x=-180; z+=r;
obrazujuschaja();
z-=2*r;
obrazujuschaja();
if(colour!=0) setcolor(LIGHTRED);
//babina
mv(-210,0+dy2,90);dw(-210,-120,90);
dw(-150,-120,90);dw(-150,0+dy2,90);
dw(-210,0+dy2,90);dw(-210,0+dy2,130);
dw(-210,-120,130);dw(-150,-120,130);
dw(-150,0+dy2,130);dw(-210,0+dy2,130);
mv(-210,-120,90);dw(-210,-120,130);
mv(-150,-120,90);dw(-150,-120,130);
mv(-150,0+dy2,90);dw(-150,0+dy2,130);
if(colour!=0) setcolor(MAGENTA);
//pod babinoj
mv(-200,50,60);dw(-200,10,60);
dw(-160,10,60);dw(-160,50,60);
dw(-200,50,60);dw(-200,50,80+dz4);
dw(-200,10,80+dz4);dw(-160,10,80+dz4);
dw(-160,50,80+dz4);dw(-200,50,80+dz4);
mv(-200,10,60);dw(-200,10,80+dz4);
mv(-160,10,60);dw(-160,10,80+dz4);
mv(-160,50,60);dw(-160,50,80+dz4);
if(colour!=0) setcolor(YELLOW);
//osnovanie rezca
mv(-200,110,60);dw(-200,70,60);
dw(-160,70,60);dw(-160,110,60);
dw(-200,110,60);dw(-200,110,80);
dw(-200,70,80);dw(-160,70,80);
dw(-160,110,80);dw(-200,110,80);
mv(-200,70,60);dw(-200,70,80);
mv(-160,70,60);dw(-160,70,80);
mv(-160,110,60);dw(-160,110,80);
//rezec
mv(-185,95,80);dw(-185,85,80);
dw(-175,85,80);dw(-175,95,80);
dw(-185,95,80);dw(-185,95,110);
dw(-185,85,100);dw(-175,85,100);
dw(-175,95,100);dw(-185,95,100);
mv(-185,85,80);dw(-185,85,100);
mv(-175,85,80);dw(-175,85,100);
mv(-175,95,80);dw(-175,95,100);
//konveyer
if(colour!=0) setcolor(BLUE);
mv(240,-950,0);dw(240,940,0);
dw(120,940,0);dw(120,-950,0);
dw(240,-950,0);dw(240,-950,60);
dw(240,940,60);dw(120,940,60);
dw(120,-950,60);dw(240,-950,60);
mv(240,940,0);dw(240,940,60);
mv(120,940,0);dw(120,940,60);
mv(120,-950,0);dw(120,-950,60);
}
void detal1(void)
{
if(colour!=0) setcolor(LIGHTGREEN);
mv(190,-950+dy,60+dz1);dw(190,-930+dy,60+dz1);
dw(170,-930+dy,60+dz1);dw(170,-950+dy,60+dz1);
dw(190,-950+dy,60+dz1);dw(190,-950+dy,80+dz1);
dw(190,-930+dy,80+dz1);dw(170,-930+dy,80+dz1);
dw(170,-950+dy,80+dz1);dw(190,-950+dy,80+dz1);
mv(190,-930+dy,60+dz1);dw(190,-930+dy,80+dz1);
mv(170,-930+dy,60+dz1);dw(170,-930+dy,80+dz1);
mv(170,-950+dy,60+dz1);dw(170,-950+dy,80+dz1);
}
void detal2(void)
{
if(colour!=0) setcolor(LIGHTGREEN);
a1=20+dx2; b1=190+dy3;
a2=20+dx2; b2=170+dy3;
a3=40+dx2; b3=170+dy3;
a4=40+dx2; b4=190+dy3;
x_o=30;y_o=30;
z1=140+dz3+dz5;z2=160+dz3+dz5;
parallelepiped12();
}
void detal3(void)
{
if(colour!=0) setcolor(LIGHTGREEN);
x1=-190; y1=100;
x2=-190; y2=80;
x3=-170; y3=80;
x4=-170; y4=100;
x_o=-180;z_o=110;
z1=100;z2=120;
parallelepiped3();
}
//-----------------------------------------
void rotate_1(void)
{
c1=cos(Rz*factor);
s1=sin(Rz*factor);
}
//-----------------------------------------
void rotate_2(void)
{
s2=sin(Rz2*factor);
c2=cos(Rz2*factor);
}
void rotate_3(void)
{s3=sin(Rz3*factor);
c3=cos(Rz3*factor);
}
//-----------------------------------------
void stcolour(void)
{
colour=colour^1;
}
//?????????????????????????????????????????
void risovanie(void)
{
setactivepage(n);
cleardevice();
drawing();
detal1();
setvisualpage(n);
n=n^1;
}
void risovanie2(void)
{
setactivepage(n);
cleardevice();
drawing();
detal2();
setvisualpage(n);
n=n^1;
}
void risovanie3(void)
{
setactivepage(n);
cleardevice();
drawing();
detal3();
setvisualpage(n);
n=n^1;
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
void main(void)
{
initgraph (&gd,&gm,"");
do
{
risovanie();
t=getch();
switch (t)
{
case '1':for(dy=0;dy<969;dy+=5)risovanie();
for(dx1=0;dx1>-35;dx1-=3) risovanie();
for(Rz2=0;Rz2<91;Rz2+=3)
{
rotate_2();
risovanie();
}
for(dz=0;dz>-80;dz-=3) risovanie();
for(dx=0;dx<9;dx+=2) risovanie();
for(dz=-80,dz1=0;dz<0,dz1<80;dz+=3,dz1+=3) risovanie();
for(Rz2=90,Rz3=0;Rz2>-91;Rz2-=3,Rz3-=3)
{
rotate_2(); rotate_3(); risovanie2();
}
for(dx1=-35;dx1<25;dx1+=3,dy3+=3) risovanie2();
for(dz=0;dz>-60;dz-=3,dz3-=3) risovanie2();
for(dx=9;dx>0;dx-=2) risovanie2();
for(dz=-60;dz<0;dz+=3) risovanie2();
for(dz4=0;dz4<20;dz4+=3,dz5+=3) risovanie2();
for(dy2=0;dy2<10;dy2+=3,dx2-=3) risovanie2();
for(dz4=20;dz4>0;dz4--) risovanie2();
for(dy2=10;dy2<80;dy2+=3,dx2+=3) risovanie2();
for(Rz=0;Rz<10000;Rz+=100)
{
rotate_1(); risovanie3();
}
for(dy2=80;dy2>10;dy2-=3,dx2-=3) risovanie2();
for(dz4=0;dz4<20;dz4++) risovanie2();
for(dy2=10;dy2>0;dy2-=3,dx2+=3) risovanie2();
for(dz4=20;dz4>0;dz4-=3,dz5-=3) risovanie2();
for(dz=0;dz>-60;dz-=3) risovanie2();
for(dx=0;dx<9;dx+=2) risovanie2();
for(dz=-60;dz<0;dz+=3,dz3+=3) risovanie2();
for(Rz2=-91,Rz3=-181;Rz2<90;Rz2+=3,Rz3+=3)
{
rotate_2();rotate_3(); risovanie2();
}
for(dx1=dx1;dx1>-35;dx1-=3,dy3-=3) risovanie2();
for(dz=dz;dz>-80;dz-=3,dz1-=3) risovanie();
for(dx=9;dx>0;dx-=2) risovanie();
for(dz=-80;dz<0;dz+=3) risovanie();
for(dy=969;dy<1869;dy+=5) risovanie();
case 't': if(Rz3>-91){ Rz3-=2;Rz2-=2; rotate_2();rotate_3();} break;
case '4': theta+=4; break;
case '6': theta-=4; break;
case '8': phi+=4; break;
case '2': phi-=4; break;
case '+': if(screen_dist<10000) screen_dist+=100; break;
case '-': if(screen_dist>0) screen_dist-=100; break;
case 'n': if(dz>-90) dz-=3; break;
case 'm': if(dz<90) dz+=3; break;
case 'q': cx-=3; break;
case 'w': cx+=3; break;
case 'a': cy-=3; break;
case 's': cy+=3; break;
case 'e': if(dx<20) dx+=2; break;
case 'r': if(dx>0) dx-=2; break;
case '.': if(dy<1500) dy+=3; break;
case ',': if(dy>0) dy-=3; break;
case 'd': if(dy2>0) dy2-=3; break;
case 'f': if(dy2<100) dy2+=3; break;
case 'l': if(Rz2>-90) Rz2-=3; rotate_2(); break;
case 'k': if(Rz2<90) Rz2+=3; rotate_2(); break;
case 'v': Rz-=33; rotate_1(); break;
case 'b': Rz+=33; rotate_1(); break;
case 'c': stcolour(); break;
case 'z': if(dx1<1500) dx1+=3; break;
}
}
while (t!=0x1b);
closegraph();
}
Размещено на Allbest.ru
...Подобные документы
Составление программы для построения траектории движения захвата манипулятора робота: запись системы линейных алгебраических уравнений, получение коэффициентов. Анимация движения манипулятора. Схема направления движения точки соединения звеньев робота.
лабораторная работа [274,4 K], добавлен 01.12.2013Выбор манипулятора-указателя, микропроцессора, интерфейса подключения к ПК. Обзор используемых команд. Проектирование функциональной и электрической принципиальной схемы контроллера трекбола. Разработка алгоритма и программы функционирования системы.
курсовая работа [453,3 K], добавлен 22.10.2012Принцип работы простейших роботов-манипуляторов. Разработка системы управления манипулятором, состоящим из трех звеньев и осуществляющим процесс сверления. Кинематическая схема и последовательность движений шаговых двигателей; применение жесткой логики.
курсовая работа [861,0 K], добавлен 16.08.2012Разработка модели лифта, алгоритма и программы на языке JavaScript. Возможность использования модели при проектировании промышленных лифтов и отладки управляющих программ. Основные принципы построения модели лифта, выполнение вычислительного эксперимента.
курсовая работа [495,8 K], добавлен 09.06.2013Практические навыки моделирования законов движения многосвязных механических систем на примере трехзвенного манипулятора. Основные этапы моделирования: исходная система; формирование исходных данных, геометрической, динамической и математической модели.
презентация [535,0 K], добавлен 25.06.2013Прямая и обратная задача кинематики и позиционирования захвата манипуляционного робота. Разработка алгоритмов и решений, позволяющих организовать процесс нанесения рисунков на поверхность изделия при помощи робота-манипулятора FS03N фирмы Kawasaki.
дипломная работа [4,1 M], добавлен 17.09.2013Определение понятия манипулятора в компьютере как указательного устройства для ввода информации. Управление компьютером с помощью игрового джойстика, мыши, трекпойнта. Программное обеспечение и способы подключения мыши (инфракрасная- и радиосвязь).
презентация [356,0 K], добавлен 05.02.2012Основные методы и уровни дистанционного управления манипуляционными роботами. Разработка программного обеспечения системы терминального управления техническим объектом. Численное моделирование и анализ исполнительной системы робота манипулятора.
дипломная работа [1,2 M], добавлен 09.06.2009Назначение и основные особенности программного комплекса Euler 6.0. Практические навыки моделирования законов движения многокомпонентных механических систем на примере трехзвенного манипулятора. Этапы моделирования, формирование динамической модели.
методичка [1,3 M], добавлен 25.06.2013Создание программы, с помощью библиотеки OpenGL рисующей проволочный чайник с поворотом рисунка вокруг осей X, Y, Z. Построение отрографической проекции. Установка области отображения. Функция обработки сообщений с клавиатуры. Главный цикл приложения.
контрольная работа [151,2 K], добавлен 21.01.2011Построение рабочей зоны. Исследование зависимости момента инерции от изменения конфигурации манипулятора. Расчет и построение нагрузочных диаграмм звеньев. Выбор комплектных электроприводов. Расчет кинетической энергии груза, плеча и двигателя локтя.
дипломная работа [2,9 M], добавлен 24.08.2014Описание алгоритма работы и разработка структурной схемы МКС. Схема вывода аналогового управляющего сигнала, подключения ЖК-дисплея, клавиатуры и аварийного датчика. Разработка блок-схемы алгоритма главной программы работы МКС. Функция инициализации.
курсовая работа [5,7 M], добавлен 26.06.2016Анализ состояния проблемы, обзор аналогов, выбор прототипов и постановка задачи. Достоинства и недостатки рассмотренных систем технического зрения. Определение формы и положения объекта в пространстве. Обоснование и разработка математического аппарата.
дипломная работа [2,5 M], добавлен 12.06.2013Описание формальной модели алгоритма на основе рекурсивных функций. Разработка аналитической и программной модели алгоритма для распознающей машины Тьюринга. Разработка аналитической модели алгоритма с использованием нормальных алгоритмов Маркова.
курсовая работа [1,5 M], добавлен 07.07.2013Назначение, принципиальное устройство и основные кинематические характеристики промышленных роботов. Разработка адаптивных систем управления. Принцип действия схемы сопряжения манипулятора с LPT-портом ПК. Разработка и изготовление печатного основания.
курсовая работа [1,4 M], добавлен 04.03.2013Кинематическое исследование механизма манипулятора, особенности управления. Определение необходимых перемещений звеньев, траектории, скоростей и ускорений. Траектория движения захвата, график пути первого звена. Программа, её содержание и текст.
курсовая работа [343,1 K], добавлен 19.12.2011Назначение, область применения и классификация промышленных роботов. Принципиальное устройство манипулятора. Разработка и программирование производственных систем искусственного интеллекта. Блок электрических клапанов и расширения параллельного порта.
дипломная работа [2,0 M], добавлен 10.02.2012Характеристика компонентов системного блока: микропроцессора, материнской платы, оперативной памяти, жесткого диска, CD-DVD привода, видеокарты и блока питания. Изучение принципа работы монитора, компьютерной клавиатуры и механического манипулятора мыши.
курсовая работа [45,7 K], добавлен 04.06.2011Разработка алгоритма и программы управления поворотной платформой лифта при помощи языка программирования Java Script. Проектирование приложения к браузеру в среде Adobe Dreamweaver CS5. Схема алгоритма, текст программы для двухмерной модели лифта.
курсовая работа [353,1 K], добавлен 18.05.2013Построение концептуальной модели и метод имитационного моделирования. Определение переменных уравнений математической модели и построение моделирующего алгоритма. Описание возможных улучшений системы и окончательный вариант модели с результатами.
курсовая работа [79,2 K], добавлен 25.06.2011