Конструирование одномерных объектов

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

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

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

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

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

КОНСТРУИРОВАНИЕ ОДНОМЕРНЫХ ОБЪЕКТОВ

Коника

Построить коническое сечение:

1. Симметричный относительно вертикальной оси профиль сечения детали, состоящей из двух коник. Первая определяется точками: C(-40;0), D(-20;-80), E(0;100) и касательными, параллельными осям координат. Вторая - точками C(-40;0), B(-20;-30), A(0,-40) и касательными, параллельными осям координат.

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

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

int driver,mode,i;

float t1,t2,l,m,f,x,y,cx,cy,dx,dy,ex,ey,ax,ay,bx,by;

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);

cx=-40;

cy=0;

dx=-30;

dy=60;

ex=0;

ey=100;

t1=dx+40;

t2=dy-100;

l=2.5*dx-dy+100;

m=t1*t2/(t1*t2-l*l);

for(x=cx;x<=ex;x=x+0.01)

{

for(y=cy;y<=ey;y=y+0.01)

{

f=(1-m)*(x+40)*(y-100)+m*(2.5*x-y+100)*(2.5*x-y+100);

if(f>=-0.1 && f<=0.1)

{

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

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

}

}

}

cx=-40;

cy=0;

bx=-30;

by=-35;

ax=0;

ay=-40;

t1=bx+40;

t2=by+40;

l=bx+by+40;

m=t1*t2/(t1*t2-l*l);

for(x=cx;x<=ax;x=x+0.01)

{

for(y=cy;y>=ay;y=y-0.01)

{

f=(1-m)*(x+40)*(y+40)+m*(x+y+40)*(x+y+40);

if(f>=-0.1 && f<=0.1)

{

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

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

} }

}

getch();

}

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

2. Коническое сечение гладкого перехода от квадратного сечения к круглому. Интервал изменения м взять равным 0.2.

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

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

int driver,mode,i;

float m,f,x,y,ax,ay,bx,by;

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);

ax=100; ay=0; bx=0; by=100;

for(m=-0.000002;m>=-0.03;m=m*3)

for(x=bx;x<=ax;x=x+0.05)

{

for(y=ay;y<=by;y=y+0.05)

{

f=(1-m)*(x-100)*(y-100)+m*(x+y+100)*(x+y+100);

if(f>=-1 && f<=1) putpixel(300+x,225-y,YELLOW);

}

}

getch();

}

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

3. Проходящее через точки A(0;0), B(1;0), C(1;1), D(0;1), E(1.5;0.5). Определить вид этого сечения.

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

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

int driver,mode,i;

float t1,t2,l,m,f,x,y,ax,ay,bx,by,cx,cy,dx,dy,ex,ey;

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);

ax=0;

ay=0;

ex=150;

ey=50;

dx=-50;

dy=50;

t1=ax+50;

t2=ax-150;

l=(dx-ex)*ay-(dy-ey)*ax+ey*(ex-dx)-ex*(ey-dy);

m=t1*t2/(t1*t2-l*l);

for(x=150;x>=0;x=x-0.05)

{

for(y=150;y>=-50;y=y-0.05)

{

f=(1-m)*(x-150)*(x+50)+m*((dx-ex)*y-(dy-ey)*x+ey*(ex-dx)-ex*(ey-dy))\

*((dx-ex)*y-(dy-ey)*x+ey*(ex-dx)-ex*(ey-dy));

if(f>=-0.1 && f<=0.1) putpixel(300+x,225-y,WHITE);

}

}

getch();

}

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

Вывод: По всей видимости конус рассекается плоскостью через основание под углом. Вид сечения - парабола.

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

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

с=R(ц)

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

X=с*cos(ц)

Y=с*sin(ц)

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

#include<stdio.h>

#include<graphics.h>

#include<math.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<=31;alfa=alfa+1)

{

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

{

x=(tan(fi+alfa/10)-alfa*10)*sin(fi); y=(tan(fi+alfa/10)-alfa*10)*cos(fi);

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

}

}

getch();

}

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

Семейства кривых (узоры)

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

1. с = a *(5 + 2*Cos(ц) + 3*Cos(цm)Sign(Cos(ц ))) - b*(Sin(18*ц))2*Cos(ц/2))8

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

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i;

float a,b,x,y,m,pi,fi,p;

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; m=10; a=5; b=100;

for(fi=0;fi<=4*pi;fi=fi+0.00001)

{

p=a*(5+2*cos(fi)+3*cos(pow(fi,m))*sin(cos(fi)))\

-b*pow(sin(18*fi),2)*pow(cos(fi/2),8);

y=p*cos(fi); x=p*sin(fi);

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

}

getch();

}

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

2.Используя уравнения:

с = a * Cos(4*t) + b

ц = t - c*Sin(4 + t)

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

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i;

float a,b,c,x,y,t,fi,pi,p;

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;

a=15;

b=5;

c=5;

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

{

p=a*cos(4*t)+b;

fi=t-c*sin(4+t);

x=p*cos(fi);

y=p*sin(fi);

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

}

getch();

}

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

3. Используя уравнение:

с = a*(1 + Cos(3*ц) + b*Sin(3*ц))2

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

#include<stdio.h>

#include<graphics.h>

#include<math.h>

main()

{

long int driver,mode,i;

float a,b,p,x,y,m,pi,fi;

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);

a=7;

b=7;

pi=3.14;

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

{

p=a*pow(cos(3*fi),2)+b*sin(3*fi);

x=p*cos(fi);

y=p*sin(fi);

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

}

getch();

}

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


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

  • Создание программы в среде программирования MatLab для решения задачи одномерной оптимизации (нахождение минимума и максимума заданных функций) методом золотого сечения, построение блок-схемы алгоритма и графическое изображение исследованных функций.

    реферат [112,0 K], добавлен 14.06.2010

  • Исследование особенностей создания математической модели и её дальнейшего решения в пакете MathCAD. Характеристика предметного и абстрактного моделирования технических объектов. Построение графика максимального прогиба балки и угла поворота сечения.

    курсовая работа [610,5 K], добавлен 11.12.2012

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

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

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

    курсовая работа [636,0 K], добавлен 04.02.2010

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

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

  • Решения алгебраических уравнений методом выделения корней. Аппроксимация функций методом наименьших квадратов; дихотомия, бисекция. Одномерная оптимизация многоэкстремальных функций; метод золотого сечения. Многомерная оптимизация градиентным методом.

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

  • Объёмные геометрические объекты и построение линии их пересечения. Выработка практических навыков в разработке и отладке программ. Содержание программы и результат ее выполнения. Методы конструирования кривых. Аппроксимация кривой методом Фергюсона.

    контрольная работа [239,7 K], добавлен 15.01.2009

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

    презентация [377,0 K], добавлен 30.10.2013

  • Характеристика программы для реализации проектов, созданных в формате трехмерного моделирования. Классификация кривых 2-го порядка. Построение окружности, эллипса, гиперболы и параболы в системе координат с помощью программного обеспечения 3D MAX.

    контрольная работа [667,7 K], добавлен 18.01.2014

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

    реферат [55,6 K], добавлен 09.04.2013

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