Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ
«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»
Розрахунково-графічна робота
з дисципліни «Інформатика»,
на тему «Анімація кривошипно-коромислового механізму»
Варіант №10
Виконав: ст. 1-го к. ММІ,
гр.. ММ-11,
Фурманюк Р. В.
Перевірив: Тітов А. В.
2012
ЗМІСТ
1. Опис кривошипно-шатунного механізму.
2. Таблиця позначень.
3. Алгоритм програми.
4. Лістинг програми.
5. Результат роботи програми.
6. Література.
1. Опис кривошипно-коромислового механізму
Механізм має одну схему складання (рис.1) і утворюється вхідною
ланкою АВ та структурною групою першого виду с трьома обертовими
кінематичними парами В, С, Д.
Рівняння замкненого векторного контура, утвореного ланками
механізму, має такий вигляд:
(1)
Рис 1. Схема кривошипно-коромислового механізму
Проекціюючи рівняння (1) на осі нерухомої системи координат ОХУ
і враховуючи, що φ4=180˚, маємо:
(2)
Координати точки В:
(3)
(4)
Задачу визначення положень механізму розвязуємо поділом
замкненого контура Δ АВСД на 2 трикутники ΔАВД і Δ ВСД.
Розглянемо Δ АВД і Δ ВСД, для яких будуть справедливими такі
залежності:
(5)
(6)
Напівпериметр : (7)
Радіус кола в Δ ВСД : (8)
Допоміжний кут : (9)
Кутова координата ланки DC : (10)
Тоді координати точки С :
Лістинг програми
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
#include<dos.h>
int xa=300, ya=200, ld=75;
int X0=30, Y0=450, k1=3.5, k2=3.5, x1, y1;
int ScreenX(float x2)
{return X0+k1*x2;}
int ScreenY(float y2)
{return Y0-k2*y2;}
void Axes()
{
float i;
int x1,y1;
char S[10];
setcolor(3);
line(X0,0,X0,479);
line(0,Y0,639,Y0);
for(i=0;i<=(640-X0)/k1;i+=10)
{
x1=ScreenX(i);
line(x1,Y0-2,x1,Y0+2);
sprintf(S,"%.0f",i);
outtextxy(x1-8,Y0+10,S);
}
for(i=Y0;i>=(480-Y0)/k2;i-=10)
{
y1=ScreenY(i);
line(X0-2,y1,X0+2,y1);
sprintf(S,"%.0f",i);
outtextxy(X0-30,y1-8,S);
}
}
void Plot(float x2, float y2, int color)
{
x1=ScreenX(x2);
y1=ScreenY(y2);
{
setcolor(color);
moveto(X0,Y0);
line(x1,y1,x1+2,y1-2);
}
}
void Draw (int xb, int yb, int xc, int yc, int xe, int ye, int n, int c)
{
int xd,yd;
xd=xa-ld;
yd=ya;
setcolor(c);
moveto(xa,ya);
lineto(xa-5,ya+10);
lineto(xa+5,ya+10);
lineto(xa,ya);
circle(xa,ya,n);
lineto(xa+xb,ya+yb);
circle(xa+xb,ya+yb,n);
lineto(xd+xc,yd+yc);
circle(xd+xc,yd+yc,n);
lineto(xd,yd);
circle(xd,yd,n);
lineto(xd-5,yd+10);
lineto(xd+5,yd+10);
lineto(xd,yd);
lineto(xd+xe,yd+ye);
lineto(xd+xe-50,102);
circle(xd+xe-50,102,n);
rectangle(xd+xe-60,102-5,xd+xe-35,102+5);
line(xd-100,yd-91,xd-30,yd-91);
}
void main()
{
int gdriver=DETECT, gmode, code;
initgraph(&gdriver,&gmode,"C:\\BORLANDC\\BGI");
int a1=0,l1=15,l2=45,l3=50,l4,f;
float P=3.14,xb,yb,f1=0,p,S,f2,f3,r,a2,xc,yc,xe,ye,x2,y2;
printf("1-animation, 2-graphic >>>>");
scanf("%d",&f);
setfillstyle(1,15);
bar(0,0,640,480);
switch(f)
{
case 1:
{
while(1)
{
f1=f1+0.1;
xb=l1*sin(f1);
yb=l1*cos(f1);
a1=atan(r/(p-l2));
if (a1!=0) S=yb/sin(a1);
else S=l4-xb;
p=(l2+l3+S)/2;
r=sqrt((p-l2)*(p-l3)*(p-S)/p);
a2=atan(xb/(l2-yb));
f3=P+(a1+a2);
xc=-l3*sin(f3);
yc=l3*cos(f3);
xe=(2*(-l3))*sin(f3);
ye=(2*l3)*cos(f3);
Draw(xb,yb,xc,yc,xe,ye,2,0);
delay(20);
Draw(xb,yb,xc,yc,xe,ye,2,15);
if(kbhit()!=0)
if(getch()==27)
break;
}
break;
}
case 2:
{
Axes();
for(x2=0;x2<200;x2++)
{
y2=10*sqrt(x2);
Plot(x2,y2,4);
}}}
getch();
closegraph();
}
Література
1
RAW
p=(l2+l3+S)/2;
r=sqrt((p-l2)*(p-l3)*(p-S)/p);
a2=atan(xb/(l2-yb));
f3=P+(a1+a2);
xc=-l3*sin(f3);
yc=l3*cos(f3);
xe=(2*(-l3))*sin(f3);
ye=(2*l3)*cos(f3);
S=l4-xb;
-
+
-
+
S=yb/sin(a1);
a1!=0
f1=f1+0.1;
xb=l1*sin(f1);
yb=l1*cos(f1);
a1=atan(r/(p-l2));
1
2
1
f
Ввод значення f:
1 анімація,
2 графік;
a1=0,l1=15,l2=45,l3=50,l4,f;
P=3.14,xb,yb,f1=0,p,S,f2,f3,r,a2,xc,yc,xe,ye,x2,y2;
ScreenX (float x2)
ScreenY (float y2)
ха=300, уа=200, ld=75;
Х0=30, Y0=450, k1=3.5, k2=3.5, x1, y1;
Початок