Одномерные объекты (кулачек)
Положение касательных линий в точках стыка дуг кривых. Плоский обвод из дуг кривых Bezier третьего порядка. Построение обвода, сохранение выпуклой оболочки для каждой из кривых. Использование В-сплайнов второго порядка. Графический редактор AutoCAD.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 19.03.2009 |
Размер файла | 215,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Отчет о лабораторной работе №4
Одномерные объекты (кулачек)
По вариантам, в соответствии с заданием, в масштабе 1:1 построить замкнутую кривую (профиль кулачка).
Для выполнения работы предварительно построить профиль на листе чертежной бумаги в масштабе 1:1. Графически определить положения касательных в точках стыка дуг кривых.
Задание 1
Замкнутую кривую построить, как плоский обвод из дуг кривых Bezier третьего порядка. На исходных кривых взять по две дополнительные точки, в которых определить положение касательных. При построении обвода сохранить выпуклую оболочку для каждой из кривых.
Текст программы
#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>
void main()
{
extern void bez(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4);
long int driver,mode,oper,i;
textcolor(2);
textbackground(15);
start: clrscr();
printf("Введите:\n\n");
printf("1 - кривая, как плоский обвод из дуг кривых Bezier 3-го порядка;\n");
printf("0 - - ВЫХОД ;\n\n");
printf("Ожидается выбор операции: ");
scanf("%ld",&oper);
printf("\n\n\n");
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"C:\\TC\\BGI");
cleardevice();
setcolor(1);
if(oper==1)
{
bez(-85,0,-60,-60,0,-85,61,-51);
bez(61,-51,86,0,52,53,37,58);
bez(37,58,0,100,-27,92,-44,61);
bez(-44,61,-54,41,-75,20,-85,0);
}
getch();
closegraph();
goto start;
}
void bez(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4)
{
float t,x,y;
line(300+x1*2,225-y1*2,300+x2*2,225-y2*2);
line(300+x2*2,225-y2*2,300+x3*2,225-y3*2);
line(300+x3*2,225-y3*2,300+x4*2,225-y4*2);
for(t=0;t<=1;t=t+0.00001)
{
x=pow((1-t),3)*x1+3*t*pow((1-t),2)*x2+3*pow(t,2)*(1-t)*x3+pow(t,3)*x4;
y=pow((1-t),3)*y1+3*t*pow((1-t),2)*y2+3*pow(t,2)*(1-t)*y3+pow(t,3)*y4;
putpixel(300+x*2,225-y*2,4);
}
return;
}
Результат выполнения:
Задание 2
Ту же самую кривую построить с использованием В-сплайнов второго порядка. На исходных кривых также взять по две дополнительные точки, в которых определить положение касательных. И при построении обвода сохранить выпуклую оболочку.
На каждом из участков обвод может быть описан уравнением
P(t) = P1(t) + P2(t) + P3(t),
где
P1(t) = 0,5 * (Pi + Pi-1) * t2,
P2(t) = 2 * (t-t2) * Pi-1,
P3(t) = 0,5 * (Pi-1 + Pi-2) * (t-1)2.
Параметр t для каждой дуги сплайна изменяется в пределах 0, ... , 1. Компонентами вектора Р являются декартовы координаты (x, y) точек кривой.
Текст программы:
#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>
void main()
{
extern void bsplain(float x1,float y1,float x2,float y2,float x3,float y3);
long int driver,mode,oper,i;
textcolor(2);
textbackground(15);
start: clrscr();
printf("Введите:\n\n");
printf("0 - - ВЫХОД ;\n\n");
printf("Ожидается выбор операции: ");
scanf("%ld",&oper);
printf("\n\n\n");
driver=DETECT;
mode=0;
initgraph(&driver,&mode,"C:\\TC\\BGI");
cleardevice();
setcolor(1);
if(oper==2)
{ {
bsplain(-85,0,-77,-34,-60,-58);
bsplain(-60,-58,-43,-74,0,-85);
bsplain(0,-85,30,-71,61,-51);
bsplain(61,-51,86,0,52,53);
bsplain(52,53,37,58,0,97);
bsplain(0,97,-27,92,-44,61);
bsplain(-44,61,-49,50,-64,30);
bsplain(-64,30,-82,10,-85,0);
}
getch();
closegraph();
goto start;
}
void bsplain(float x1,float y1,float x2,float y2,float x3,float y3)
{
float t,x,y;
line(300+x1*2,225-y1*2,300+x2*2,225-y2*2);
line(300+x2*2,225-y2*2,300+x3*2,225-y3*2);
x1=(x1-x2)+x1; y1=(y1-y2)+y1;
x3=(x3-x2)+x3; y3=(y3-y2)+y3;
for(t=0.01;t<=0.99;t=t+0.001)
{
x=(x1+x2)/2*(1-t)*(1-t)+2*x2*(1-t)*t+(x2+x3)/2*t*t;
y=(y1+y2)/2*(1-t)*(1-t)+2*y2*(1-t)*t+(y2+y3)/2*t*t;
putpixel(300+x*2,225-y*2,4);
}
return;
}
Результат выполнения:
Задание 3
Ту же самую кривую построить в графическом редакторе AutoCAD.
Подобные документы
Характеристика программы для реализации проектов, созданных в формате трехмерного моделирования. Классификация кривых 2-го порядка. Построение окружности, эллипса, гиперболы и параболы в системе координат с помощью программного обеспечения 3D MAX.
контрольная работа [667,7 K], добавлен 18.01.2014Математическая модель построения кривых Безье с описанием реализации на языке Visual С++. Вычисление длины кривой. Условие непрерывности соседних кривых Безье, частные случаи. Структура программы, вызываемые функции. Описание основных алгоритмов.
курсовая работа [405,3 K], добавлен 06.08.2013Исследование элементов эллиптических кривых, необходимых для реализации криптографических протоколов. Изучение алгоритмов арифметики точек эллиптической кривой и способов генерации кривых для криптографических алгоритмов. Описание алгоритмов шифрования.
курсовая работа [371,2 K], добавлен 07.08.2012Разработка программы-приложения для создания композиции кривых второго порядка в полярных координатах. Описание используемых констант, переменных, компонентов, процедур и функций. Источники входной и выходной информации. Требования к программе и системе.
реферат [125,2 K], добавлен 28.05.2014Существующие методы нахождения графических примитивов и программных реализаций. Базовое преобразование Хафа: поиск прямых, выделение окружностей на изображении, нахождение кривых высшего порядка. Составление руководства программиста и пользователя.
курсовая работа [2,7 M], добавлен 20.03.2012Создание простейших рисунков, закраска объектов в CorelDraw. Работа с текстом в графических объектах в программе CorelDRAW. Использование кривых линий и ломаных. Упорядочивание, выравнивание и группировка объектов. Использование графических эффектов.
практическая работа [1,5 M], добавлен 19.04.2012Функции графического редактора Paint. Сохранение документов, вставка, перемещение, копирование, удаление. Многократное увеличение или уменьшение инструмента. Полная палитра, выбор третьего цвета для рисования, пипетка, заливка, пользовательская кисть.
контрольная работа [22,3 K], добавлен 27.07.2009Произвольные кривые. Узлы кривой. Создание кривых Безье. Возможные применения инструмента Безье. Редактирование фигур и кривых. Инструменты Knife (нож), Erase (ластик) и Free Transform (свободное преобразование).
реферат [38,4 K], добавлен 21.12.2003Объёмные геометрические объекты и построение линии их пересечения. Выработка практических навыков в разработке и отладке программ. Содержание программы и результат ее выполнения. Методы конструирования кривых. Аппроксимация кривой методом Фергюсона.
контрольная работа [239,7 K], добавлен 15.01.2009Способы создания и редактирования контуров с использованием инструментария графического редактора CorelDRAW. Точное построение и вычерчивание кривых, преобразование типов узлов, преобразование линии в кривую, разрезание и произвольное искажение контура.
контрольная работа [47,8 K], добавлен 02.06.2010