You are on page 1of 3

//bgi++ -Wall -g robotics_assignment6.cxx -o robotics_assignment6.

exe
/*6.Write a program in c language to draw three lines/links (named L1, L2 & L3).
Perform rotation of line/link L1 and L2.
Angles of rotation (Theta1 & Theta2) will be given by user.
(Hint: Link L2 & L3 will rotate Theta1 with Link L1 and after that Link L3 will
rotate Theta2 with Link L2)*/
#include
#include
#include
#include

<stdio.h>
<conio.h>
<graphics.h>
<math.h>

#define Pi 3.14
int i,xi,yi,xm1,ym1,xm2,ym2,xf,yf,l1x,l2x,l1y,l2y,l3x,l3y,theta1=30,theta2=15,gd
river=DETECT,gmode,temp[4];
int maxx,maxy,originx,originy;
float angleinradians;
void drawaxes (void);
void rotatelink1 (int);
void rotatelink2 (int);
int main()
{
initgraph(&gdriver,&gmode,"");
//printf("Enter angles in degrees theta1 and theta2\n");
//scanf("%d%d",&theta1,&theta2);
maxx=getmaxx();
maxy=getmaxy();
originx=maxx/2;
originy=maxy/2;
setcolor(9);
drawaxes();
xi=0;yi=0;xm1=150;ym1=0;xm2=250;ym2=100;xf=250;yf=200;
l1x=xm1-xi;l2x=xm2-xm1;l3x=xf-xm2;l1y=ym1-yi;l2y=ym2-ym1;l3y=yf-ym2;
line(xi,yi,xm1,ym1);//link 1
line(xm1,ym1,xm2,ym2);//link 2
line(xm2,ym2,xf,yf);// link 3
getch();
// rotate l1 by theta 1 l2 l3 will rotate in accordance with l1 and draw
for(i=1;i<=theta1;i++)
{
rotatelink1(i);
}
temp[0]=xm2;temp[1]=ym2;temp[2]=xf;temp[3]=yf;
l2x=xm2-xm1;l3x=xf-xm2;l2y=ym2-ym1;l3y=yf-ym2;
getch();
// rotate l2 by theta 2 l3 will rotate in accordance with l2 and draw
for(i=1;i<=theta2;i++)
{
rotatelink2(i);
}

//close graphics
getch();//to hold the output
closegraph();
return 0;
}
void drawaxes (void)
{
line(originx,0,originx,maxy);//yaxis
line(0,originy,maxx,originy);//xaxis
}
void rotatelink1 (int i)
{
cleardevice();
angleinradians=(((float)i*Pi)/180);
setcolor(15);
drawaxes();
line(0,0,150,0);
//link 1
line(150,0,250,100);
//link 2
line(250,100,250,200); //link 3
setcolor(12);
//rotate link1
xm1=(int)((float)l1x*cos(angleinradians)-(float)l1y*sin(
angleinradians))+xi;
ym1=(int)((float)l1x*sin(angleinradians)+(float)l1y*cos(
angleinradians))+yi;
//printf("tempx %d tempy %d \n",tempx,tempy);
line(xi,yi,xm1,ym1);
//rotate link 2 such that it seems stationary with respect to link 1
xm2=(int)((float)l2x*cos(angleinradians)-(float)l2y*sin(angleinradia
ns))+xm1;
ym2=(int)((float)l2x*sin(angleinradians)+(float)l2y*cos(angleinradia
ns))+ym1;
line(xm1,ym1,xm2,ym2);
//rotate link 3 such that it seems stationary with respect to link 2
xf=(int)((float)l3x*cos(angleinradians)-(float)l3y*sin(angleinradian
s))+xm2;
yf=(int)((float)l3x*sin(angleinradians)+(float)l3y*cos(angleinradian
s))+ym2;
line(xm2,ym2,xf,yf);
delay(50);
}
void rotatelink2 (int i)
{
cleardevice();
angleinradians=(((float)i*Pi)/180);
setcolor(15);//white
drawaxes();
line(0,0,150,0);
//link 1
line(150,0,250,100);
//link 2
line(250,100,250,200); //link 3
setcolor(12);//light red
line(xi,yi,xm1,ym1);
//link 1
line(xm1,ym1,temp[0],temp[1]);
//link 2
line(temp[0],temp[1],temp[2],temp[3]); //link 3
setcolor(10);//light green
//rotate link 2

xm2=(int)((float)l2x*cos(angleinradians)-(float)l2y*sin(angleinradia
ns))+xm1;
ym2=(int)((float)l2x*sin(angleinradians)+(float)l2y*cos(angleinradia
ns))+ym1;
line(xm1,ym1,xm2,ym2);
//rotate link 3 such that it seems stationary with respect to link 2
xf=(int)((float)l3x*cos(angleinradians)-(float)l3y*sin(angleinradian
s))+xm2;
yf=(int)((float)l3x*sin(angleinradians)+(float)l3y*cos(angleinradian
s))+ym2;
line(xm2,ym2,xf,yf);
delay(50);
}

You might also like