Генерация кривых (параметрические кривые) на языке С++

Компьютерная графика – это раздел компьютерной математики, занимающийся синтезом изображений на экране дисплея. Генератор кривых, основанный на вычислительной структуре, состоящей из элементов двух типов – конического и линейного интерполяторов.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.