Геометрические примитивы

Построение отрезков, окружностей, циклоидов, трохоидов, узоров и вписанных многоугольников, используя различные системы и дифференциальные уравнения. Кривые в полярных координатах. Функции действительного аргумента. Переход к декартовой системе.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 19.03.2009
Размер файла 161,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Отчет о лабораторной работе №1

ГЕОМЕТРИЧЕСКИЕ ПРИМИТИВЫ

Прямая

Задание 1. Построить отрезки прямых, используя уравнение:

Y=k*X+b

для k=0, k=1, k=10000, k=0.2, k=1.5 (приращение ДХ принять постоянным):

dy/dx=Дy/Дx=const

Величину const принять равной значению k, определенному выше.

Текст программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

int driver,mode,i;

float x1,x2,y1,y2,k,b;

printf("\n\nУравнение вида Y=K*X+B\n\n");

printf("Введите K:...");

scanf("%f",&k);

printf("Введите B:...");

scanf("%f",&b);

x1=0; y1=k*x1+b; x2=200; y2=k*x2+b;

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,450,630,450); line(630,450,625,455);

line(630,450,625,445); line(0,70,0,450); line(0,70,5,75);

for(i=10;i<=600;i=i+10) line(0+i,450,0+i,448);

for(i=10;i<=300;i=i+10) line(0,450-i,2,450-i);

setcolor(YELLOW);

line(x1,450-y1,x2,450-y2);

getch();

}

Результат выполнения:

при k=0 b=10, k=0,3 b=5 k=0,6 b=10 k=1 b=10

Вывод: при изменении параметра k от 0 до 1 прямая поворачивается на определённые углы. Параметр b отвечает за координату у начальной точки прямой.

Задание 2. Построить отрезки прямых, используя уравнения:

X=x1*(1-t)+x2*t

Y=y1*(1-t)+y2*t

Полагать, что 1(x1;y1) - начало отрезка, 2(x2;y2) - конец отрезка, а независимый параметр t изменяется от 0 до 1. Рассмотреть поведение отрезка при значениях параметра t>1 и t<0.

Текст программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

int driver,mode,i,x1,x2,y1,y2;

float t,dt,x,y,a,b;

printf("\n\nУравнение вида X=x1*(1-t)+x2*t\n");

printf(" Y=y1*(1-t)+y2*t\n\n");

x1=300; y1=225; x2=400; y2=125;

printf("Введите границы изменения параметра t:...");

scanf("%f%f",&a,&b);

printf("Введите шаг изменения t:...");

scanf("%f",&dt);

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

for(t=a;t<=b;t=t+dt)

{

x=x1*(1-t)+x2*t;

y=y1*(1-t)+y2*t;

putpixel(x,y,YELLOW);

}

getch();

}

Результат выполнения:

х1=50; y1=50; x2=100; y2=100; x1=120; y1=50; x2=40; y2=80;
Вывод: При изменении t отрезок смещается, а при уменьшении шага уплотняется.
Окружность
Задание 1. Построить окружность, используя уравнение:
(X-a)2+(Y-b)2=R2
a=150, b=100, R=50 (a=0, b=0, R=80)
Текст программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i,a,b,r;

float x,y1,y2,stepen;

printf("\n\nУравнение вида (x-a)2+(y-b)2=r2\n\n");

printf("Введите A:...");

scanf("%ld",&a);

printf("Введите B:...");

scanf("%ld",&b);

printf("Введите R:...");

scanf("%ld",&r);

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

stepen=1/2.;

for(x=a-r;x<=a+r;x=x+1)

{

y1=pow((pow(r,2)-pow((x-a),2)),stepen)+b;

y2=-pow((pow(r,2)-pow((x-a),2)),stepen)+b;

putpixel(300+x,225-y1,YELLOW);

putpixel(300+x,225-y2,YELLOW);

}

getch();

}

Результат выполнения:

a=10, b=4, r=30

Задание 2. Построить окружность, используя уравнение:

X=a+R*cos(ц)

Y=b+R*sin(ц)

a=150, b=100, R=50 (a=0, b=0, R=80)

Текст программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i,a,b,r;

float x,y,step,pi,fi;

printf("\n\nУравнения вида X=a+R*cos(fi)\n");

printf(" Y=b+R*sin(fi)\n\n");

printf("Введите A:...");

scanf("%ld",&a);

printf("Введите B:...");

scanf("%ld",&b);

printf("Введите R:...");

scanf("%ld",&r);

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

step=1/2.;

pi=3.14;

for(fi=0;fi<=2*pi;fi=fi+0.01)

{

x=a+r*cos(fi);

y=b+r*sin(fi);

putpixel(300+x,225-y,YELLOW);

putpixel(300+x,225-y,YELLOW);

}

getch();

}

Результат выполнения:

a=10, b=4, r=30

Задание 3. Построить окружность, рассматривая дифференциальное уравнение:

dy/dx=-x/y,

решением которого может быть:

Xn+1=Xn+еYn

Yn+1=Yn - еXn

Значение величины е принять равной 2-n (2n-1<=R<=2n, начало окружности совпадает с началом координат, радиус равен расстоянию от начала координат до первой точки 1(x1;y1)), или улучшенный вариант:

Xn+1=Xn+еYn

Yn+1=Yn - еXn+1

Текст программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i,n;

float e,x,y;

printf("\n\nУравнения вида X(n+1)=X(n)+E*Y(n)\n");

printf(" Y(n+1)=Y(n)-E*X(n+1)\n\n");

printf("Введите количество точек окружности N:...");

scanf("%ld",&n);

x=0;

y=50;

printf("Введите E:...");

scanf("%f",&e);

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

for(i=1;i<=n+1;i=i+1)

{

putpixel(300+x,225-y,YELLOW);

x=x+e*y;

y=y-e*x;

}

getch();

}

Результат выполнения:

n=75, е=0.1

Вывод: При уменьшении е окружность принимает более правильную форму.

Задание 4. Построить окружность, используя итерационные уравнения:

Xn+1=Xn*cos(ц)+Yn*sin(ц)

Yn+1=Yn*cos(ц)-Xn*sin(ц)

Значение угла ц принять постоянным ц=2р/n (n - число точек окружности).

Текст программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i,n;

float x,y,x1,y1,fi;

printf("\n\nУравнения вида X(n+1)=X(n)*cos(fi)+Y(n)*sin(fi)\n");

printf(" Y(n+1)=Y(n)*cos(fi)-X(n)*sin(fi)\n\n");

printf("Введите количество точек окружности N:...");

scanf("%ld",&n);

x1=x=0; y1=y=50; fi=6.28/n;

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

for(i=1;i<=n+1;i=i+1)

{

putpixel(300+x,225-y,YELLOW);

x=x1*cos(fi)+y1*sin(fi);

y=y1*cos(fi)-x1*sin(fi);

x1=x;

y1=y;

}

getch();

}

Результат выполнения:

N=500, x=50, y=50, r=50 N=100, x=50, y=50, r=50 N=50, x=50, y=50, r=40

Вывод: чем большее количество точек мы берём, тем больше спираль похожа на окружность.

Кривые в полярных координатах

Уравнение кривой в полярной системе координат имеет вид:

с=R(ц)

где с - расстояние до начала координат, ц - угол отклонения от горизонтальной оси, R - произвольная функция действительного аргумента, которая определяет вил кривой. Зависимость между с и ц может быть и нефункциональной, тогда ее можно задать неявно (F(с, ц)=0) или системой параметрических уравнений (с=с(t), ц=ц(t)). Переход к декартовой системе осуществляется преобразованием:

X=с*cos(ц)

Y=с*sin(ц)

Текст программы:

#include<stdio.h>

#include<graphics.h>

main()

{

long int driver,mode,i;

float x,y,pi,fi,alfa;

printf("\n\nУравнения вида X=F(alfa)*cos(fi)\n");

printf(" Y=F(alfa)*sin(fi)\n");

getch();

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

pi=3.14;

for(alfa=0;alfa<=5;alfa=alfa+1)

{

for(fi=0;fi<=2*pi;fi=fi+0.0001)

{

x=(tan(fi)+alfa*20)*sin(fi);

y=(tan(fi)+alfa*20)*cos(fi);

putpixel(300+x,225-y,YELLOW);

}

}

getch();

}

Результат выполнении:

Циклоиды

Построить для различных значений параметров кривые, описываемые уравнениями:

X=a+R*cos(ц)+A*cos(и)

Y=b+R*sin(ц)+B*sin(и)

Текст программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i,a1,a2,b1,b2,r;

float x,y,pi,fi,alfa;

printf("\n\nУравнения вида X=a+R*cos(alfa)+A*cos(fi)\n");

printf(" Y=b+R*sin(alfa)+B*sin(fi)\n");

printf("Введите a:..."); scanf("%ld",&a1);

printf("Введите b:..."); scanf("%ld",&b1);

printf("Введите A:..."); scanf("%ld",&a2);

printf("Введите B:..."); scanf("%ld",&b2);

printf("Введите R:..."); scanf("%ld",&r);

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

pi=3.14;

for(alfa=1;alfa<=2*pi;alfa=alfa+1)

for(fi=0;fi<=2*pi;fi=fi+0.01)

{

x=a1+r*cos(alfa)+a2*cos(fi);

y=b1+r*sin(alfa)+b2*sin(fi);

putpixel(300+x,225-y,YELLOW);

}

getch();}

Результат выполнения:

Трохоиды

Построить для различных значений параметров кривые, описываемые уравнениями:

X=a+Rx*cos(ц/sx+Дx)

Y=b+Ry*sin(ц/sy+Дy)

Тест программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i,a,b;

float x,y,fi,pi,sx,sy,dx,dy,rx,ry;

printf("\n\nУравнения вида X=a+rx*cos(fi/sx+dx)\n");

printf(" Y=b+ry*sin(fi/sy+dy)\n");

printf("Введите a:..."); scanf("%ld",&a);

printf("Введите b:..."); scanf("%ld",&b);

driver=DETECT;

mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

pi=3.14;

sx=1; /* закручивание */

sy=0.1;

dx=0.7; /* смещение петель */

dy=0.7;

rx=0.8; /* растяг по ширине */

ry=0.6; /* растяг по высоте */

for(fi=0;fi<=2*pi;fi=fi+0.001)

{

x=a+rx*cos(fi/sx+dx)*200;

y=b+ry*sin(fi/sy+dy)*200;

putpixel(300+x,225-y,YELLOW);

}

getch();

}

Результат выполнения:

Узоры

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

Текст программы:

#include<stdio.h>

#include<graphics.h>

main()

{

long int driver,mode,i;

float x,y,pi,fi,alfa;

driver=DETECT; mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220);

line(630,225,625,230); line(300,0,300,450);

line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

pi=3.14;

for(alfa=0;alfa<=140;alfa=alfa+1)

for(fi=0;fi<=pi;fi=fi+0.01)

{

x=cos(alfa+fi)*sin(fi)*220;

y=cos(alfa+fi)*cos(fi)*220;

putpixel(300+x,225-y,YELLOW);

}

getch();

}

Результат выполнения:

Используя схему деления отрезка в данном отношении, построить вписанные многоугольники.

Текст программы:

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i;

float x,y;

driver=DETECT; mode=0;

initgraph(&driver,&mode,"d:\\tc\\bgi");

line(0,225,630,225); line(630,225,625,220); line(630,225,625,230);

line(300,0,300,450); line(300,0,295,5); line(300,0,305,5);

for(i=0;i<=300;i=i+10) line(300+i,225,300+i,223);

for(i=0;i<=300;i=i+10) line(300-i,225,300-i,227);

for(i=0;i<=200;i=i+10) line(300,225-i,302,225-i);

for(i=0;i<=200;i=i+10) line(300,225+i,298,225+i);

for(i=0;i<=1000;i=i+2)

{

line(290+i,215-i,310+i,215+i);

line(310+i,215+i,310-i,235+i);

line(310-i,235+i,290-i,235-i);

line(290-i,235-i,290+i,215-i);

i=i+3;

}

getch();

}

Результат выполнения:


Подобные документы

  • Математический аппарат исследования САУ. Дифференциальные уравнения, описывающие движение системы являю тся уравнениями динамики. Дифференциальные уравнения САУ, ее элементы. Дифференциальные уравнения высокого порядка. Математическая модель системы.

    реферат [81,2 K], добавлен 17.10.2008

  • Угловое распределение волновой функции электрона для водородоподобной модели атомов. Описание электронных свойств атома с помощью уравнения Шредингера. Построение графика 3D4d-орбитали в среде LabView с заменой декартовой системы координат на сферическую.

    практическая работа [646,3 K], добавлен 14.11.2015

  • Разработка программы-приложения для создания композиции кривых второго порядка в полярных координатах. Описание используемых констант, переменных, компонентов, процедур и функций. Источники входной и выходной информации. Требования к программе и системе.

    реферат [125,2 K], добавлен 28.05.2014

  • Дифференциальные уравнения как уравнения, в которых неизвестными являются функции одного или нескольких переменных, причем в уравнения входят не только сами функции, но и их производные. Решение операторным методом, с помощью рядов, методом Эйлера.

    курсовая работа [301,4 K], добавлен 27.03.2011

  • Построение графика функции. Поиск корней уравнения методом половинного деления. Определение минимума функции методом перебора и значения аргумента. Вычисление определенного интеграла на заданном отрезке с использованием метода правых прямоугольников.

    контрольная работа [316,1 K], добавлен 13.11.2014

  • Расчет и построение таблицы значений функции (протабулирование функции) при различных значениях аргумента. Нахождение наибольшего и наименьшего значений функции на отрезке и построение графика. Рабочий лист Excel в режимах отображения значений и формул.

    контрольная работа [30,0 K], добавлен 27.05.2010

  • Появление дифференциальных уравнений при описании систем управления. Элементы теории дифференциальных уравнений. Определитель Вронского. Формула Лиувилля. Дифференциальные уравнения при описании непрерывных систем. Понятие пространства состояний.

    реферат [1,0 M], добавлен 29.09.2008

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

    курсовая работа [596,7 K], добавлен 13.01.2014

  • Векторная компьютерная графика. Графические примитивы. Графические возможности языка программирования Pascal. Методические рекомендации к изучению графики в языке программирования Pascal. Построение графиков функций.

    курсовая работа [28,3 K], добавлен 13.06.2007

  • История создания и развитие языка программирования Pascal, его версии. Особенности и порядок построения графика функции на языке Turbo Pascal с использованием декартовой системы координат. Блок схема алгоритма процедур, листинг и тестирование программы.

    курсовая работа [102,7 K], добавлен 23.12.2011

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