Генерация кривых (параметрические кривые) на языке С++
Компьютерная графика – это раздел компьютерной математики, занимающийся синтезом изображений на экране дисплея. Генератор кривых, основанный на вычислительной структуре, состоящей из элементов двух типов – конического и линейного интерполяторов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 19.03.2009 |
Размер файла | 371,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Отчет о лабораторной работе №3
Генерация кривых (параметрические кривые)
Задание 1. Смоделировать и исследовать работу спирографа (см. рисунок).
По окружности радиуса R1 (без скольжения) катится круглый диск радиуса R2. В диске, на расстоянии R3 от центра, имеется отверстие (рисующая точка). Окружность R2 может перемещаться, как по наружной части окружности R1, так и по внутренней. Величина R3 может быть как больше, так и меньше R2.
Текст программы:
#include<stdio.h>
#include<graphics.h>
#include<math.h>
main()
{
int r1,r2,r3;
float fi,x2,y2,x1,y1,l,alfa;
printf("\t\t Spirograph\n\n");
printf(" Vvedite R1\n ");
scanf("%d",&r1);
printf(" Vvedite R2\n ");
scanf("%d",&r2);
printf(" Vvedite R3\n ");
scanf("%d",&r3);
ploskost();
for(fi=0;fi<=6.29;fi=fi+0.0001)
{
x1=r1*cos(fi);
y1=r1*sin(fi);
putpixel(320+x1,230-y1,WHITE);
}
for(fi=0;fi<=6.29;fi=fi+0.0001)
{
x1=(r1+r2)*cos(fi);
y1=(r1+r2)*sin(fi);
alfa=r1*fi/r2-3.14+fi;
x2=x1+r3*cos(alfa);
y2=y1+r3*sin(alfa);
putpixel(320+x2,230-y2,WHITE);
}
getch();
for(fi=0;fi<=6.29;fi=fi+0.0001)
{
x1=(r1-r2)*cos(fi);
y1=(r1-r2)*sin(fi);
alfa=r1*fi/r2-3.14+fi;
x2=x1+r3*cos(alfa);
y2=y1+r3*sin(alfa);
putpixel(320+x2,230-y2,WHITE);
}
getch();
}
Результат выполнения:
Задание 2. Исследовать поведение (влияние формы выпуклой оболочки на форму кривой) кривых Bezier первого, второго и третьего порядков, описываемых общими уравнениями
Px (t) = У C im t i (1-t) m-i Xi ,Py (t) = У C im t i (1-t) m-i Yi .
где m - порядок кривой, а i = 0, ... , m. Коэффициенты C im могут вычисляться по общей формуле
m!
Cim = ------------
i! (m-i)!
или по рекуррентным соотношениям
C im = C im-1 + C i-1m-1 .
Текст программы:
#include<stdio.h>
#include<graphics.h>
#include<math.h>
main()
{
int com,r1,r2,r3,s,f,so,fo,sf,s1,f1,so1,fo1,sf1;
float fi,x2,y2,x1,y1,l,alfa,t;
printf("\n Vvedite porjadok krivyh Bezier\n ");
scanf("%d",&com);
switch(com)
{
case 1: // линии первого порядка;
ploskost();
for(t=0;t<=1;t+=0.0001)
{
x1=(1-t)*(-50)+t*100;
y1=(1-t)*(-100)+t*150;
putpixel(320+x1,230-y1,WHITE);
}
getch();
closegraph();
goto menu;
case 2: // линии второго порядка;
ploskost();
line(320+100,230+100,320-150,230-50);
line(320-150,230-50,320+100,230-120);
for(t=0;t<=1;t+=0.0001)
{
for(x2=0;x2<=10;x2+=0.001);
x1=pow(1-t,2)*(100)+2*t*(1-t)*(-150)+pow(t,2)*100;
y1=pow(1-t,2)*(-100)+2*(1-t)*t*50+pow(t,2)*(120);
putpixel(320+x1,230-y1,WHITE);
}
getch();
closegraph();
goto menu;
case 3: // линии третьего порядка;
ploskost();
line(320-100,230-150,320+150,230-50);
line(320+150,230-50,320-50,230+70);
line(320-50,230+70,320+200,230+170);
for(t=0;t<=1;t+=0.0001)
{
for(x2=0;x2<=10;x2+=0.001);
x1=pow(1-t,3)*(-100)+3*pow(1-t,2)*t*150+3*(1-t)*pow(t,2)*(-50)+pow(t,3)*200;
y1=pow(1-t,3)*150+3*pow(1-t,2)*t*50+3*(1-t)*pow(t,2)*(-70)+pow(t,3)*(-170);
putpixel(320+x1,230-y1,WHITE);
}
getch();
closegraph();
goto menu;
case 4:// линии четвёртого порядка;
ploskost();
printf(" Vvedite koordinaty 1oj tochki: \n ");
scanf("%d%d",&s&s1);
printf(" Vvedite koordinaty 2oj tochki: \n ");
scanf("%d%d",&f&f1);
printf(" Vvedite koordinaty 3oj tochki: \n ");
scanf("%d%d",&so&so1);
printf(" Vvedite koordinaty 4oj tochki: \n ");
scanf("%d%d",&fo&fo1);
printf(" Vvedite koordinaty 5oj tochki: \n ");
scanf("%d%d",&sf&sf1);
line(320-150,230-200,320+100,230-150);
line(320+100,230-150,320-230,230-20);
line(320-230,230-20,320+130,230+80);
line(320+130,230+80,320-10,230+220);
for(t=0;t<=1;t+=0.0001)
{
for(x2=0;x2<=10;x2+=0.001);
x1=pow(1-t,4)*(-150)+4*pow(1-t,3)*t*100+6*pow(1-t,2)*pow(t,2)*(-230)+4*(1-t)*pow(t,3)*130+pow(t,4)*(-10);
y1=pow(1-t,4)*200+4*pow(1-t,3)*t*150+6*pow(1-t,2)*pow(t,2)*20+4*(1-t)*pow(t,3)*(-80)+pow(t,4)*(-220);
putpixel(320+x1,230-y1,WHITE);
}
getch();
closegraph();
goto menu;
/* default: */
}
goto menu;
case 3: return 0;
default: goto menu;
}
}
Результат выполнения:
1-го порядка
2-го порядка
3-го порядка
4-го порядка
Вывод: Линии Bezier первого порядка получается прямая линия, линии второго порядка строятся через три точки,и кривая в этом случае зависит от расположения точек, также и в высших порядках поведение кривой зависит от расположения точек.
Подобные документы
Средства и способы создания и обработки графических изображений при помощи компьютерной техники. Растровая, векторная, трёхмерная и фрактальная графика, отличия принципов формирования изображения при отображении на экране монитора. Програмные средства.
реферат [436,4 K], добавлен 26.03.2010Понятие и инструменты, используемые в компьютерной графике. Принципы формирования изображений на экране. Порядок построения графиков функций. Порядок и приемы анимационного оформления графических изображений, используемые техники и их функционирование.
методичка [2,5 M], добавлен 09.12.2014Компьютерная графика - область информатики, занимающаяся проблемами получения различных изображений. Виды компьютерной графики: растровая, векторная, фрактальная. Программы для создания компьютерной анимации, область применения, форматы хранения.
реферат [29,1 K], добавлен 16.03.2010Компьютерная графика как инструмент для синтеза (создания) изображений. Характеристика векторного, растрового и фрактального типов представления изображений, трёхмерная графика. Интерфейс программы "Photoshop", пример работы по коррекции фотографий.
курсовая работа [4,5 M], добавлен 19.01.2011Основные понятия и задачи, решаемые компьютерной графикой. Характеристика и разновидности компьютерной графики. Цветовые модели RGB, CMYK, HSB. Графические форматы растровых и векторных изображений. Особенности шелкографии, трёхмерная графика и анимация.
курсовая работа [350,7 K], добавлен 20.02.2012Математическая модель построения кривых Безье с описанием реализации на языке Visual С++. Вычисление длины кривой. Условие непрерывности соседних кривых Безье, частные случаи. Структура программы, вызываемые функции. Описание основных алгоритмов.
курсовая работа [405,3 K], добавлен 06.08.2013Компьютерная графика как область информатики, занимающаяся проблемами получения различных изображений на компьютере. Области применения компьютерной графики. Двумерная графика: фрактальная, растровая и векторная. Особенности трёхмерной графики.
реферат [756,4 K], добавлен 05.12.2010Преимущества векторных изображений. Описание работы с программой создания графических изображений - Illustrator. Метод создания кривых с помощью четырех точек для криволинейного сегмента. Создание контуров с помощь инструмента "Перо". Работа с масками.
контрольная работа [575,8 K], добавлен 11.09.2010Исследование элементов эллиптических кривых, необходимых для реализации криптографических протоколов. Изучение алгоритмов арифметики точек эллиптической кривой и способов генерации кривых для криптографических алгоритмов. Описание алгоритмов шифрования.
курсовая работа [371,2 K], добавлен 07.08.2012Компьютерная графика как раздел информационных технологий, в котором изучают вопросы получения графических изображений с помощью компьютера. Ее классификация и типы, сравнительная характеристика, признаки: растровая, векторная, фрактальная и трехмерная.
презентация [2,0 M], добавлен 04.04.2016