Write C++/Java program to draw inscribed and Circumscribed circles in the triangle,

Second Year Computer Engineering Computer Graphics Programs:

Computer Graphics Lab:

----------------------------------------------------------------------------------------------------------------------------------
Practical 7:

         Write C++/Java program to draw inscribed and Circumscribed circles in the triangle as shown as an example below. (Use any Circle drawing and Line drawing algorithms)

#include <iostream>
#include <stdlib.h>
#include <graphics.h>
#include <math.h>

using namespace std;

int xmax,ymax,xmid,ymid;
class Line
{
public:
int x1,x2,y1,y2;
void dda(int x1,int y1,int x2,int y2)
{
float x,y,dx,dy,length;
int i;
dx = abs(x2-x1);
dy = abs(y2-y1);
if(dx>dy)
{length = dx;}
else
{length = dy;}
dx = (x2-x1)/length;
dy = (y2-y1)/length;
x = x1 + 0.5;
y = y1 + 0.5;
i=1;
while(i<=length)
{
putpixel(x,y,12);
x = x + dx;
y = y + dy;
i++;
}
putpixel(x,y,12);
}
};

class Circle
{
public:
void plot(int x,int y,int x1,int y1)
{
putpixel(xmid+x+x1,ymid-(y+y1),12);
putpixel(xmid+y+x1,ymid-(x+y1),12);
putpixel(xmid-x+x1,ymid-(y+y1),12);
putpixel(xmid+y+x1,ymid-(-x+y1),12);
putpixel(xmid+x+x1,ymid-(-y+y1),12);
putpixel(xmid-y+x1,ymid-(x+y1),12);
putpixel(xmid-x+x1,ymid-(-y+y1),12);
putpixel(xmid-y+x1,ymid-(-x+y1),12);
}

void drawcircle(float x1,float y1,int r)
{
float x,y,d;
d = 3 - (2 * r);
x=0;
y=r;
while(x<=y)
{
plot(x,y,x1,y1);
if(d<0)
d = d + (4 * x) + 6;
else
{
d = d + (4 * (x - y)) + 10;
y=y-1;
}
x=x+1;
}

}
};

void display(int x1,int y1,int x2,int y2,int x3,int y3)
{
Line obj;
obj.dda(x1+xmid,ymid-y1,x2+xmid,ymid-y2);delay(300);
obj.dda(x2+xmid,ymid-y2,x3+xmid,ymid-y3);delay(300);
obj.dda(x3+xmid,ymid-y3,x1+xmid,ymid-y1);delay(300);
}

int main()
{
Circle obj2;
int gd=DETECT,gm;
int x1=50,y1=50,x2=150,y2=50,x3=100,y3=175;
initgraph(&gd,&gm,NULL);
xmax=getmaxx();
ymax=getmaxy();
xmid=xmax/2;
ymid=ymax/2;


display(x1,y1,x2,y2,x3,y3);
float a,b,c,incenterx,incentery,inradius,s;

a = sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
b = sqrt((x3-x2)*(x3-x2)+(y3-y2)*(y3-y2));
c = sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));

incenterx = ((a*x3)+(b*x1)+(c*x2))/(a+b+c);
incentery = ((a*y3)+(b*y1)+(c*y2))/(a+b+c);
inradius = 0.5*sqrt(((a+b-c)*(a+c-b)*(c+b-a))/(a+b+c));
obj2.drawcircle(incenterx,incentery,inradius);

float circenterx,circentery,cerradius;
cerradius = (a*b*c)/(4*((a+b+c)*(0.5))*inradius);
float A,B,C;
A = acos(((c*c)+(a*a)-(b*b))/(2*a*c));
B = acos(((b*b)+(a*a)-(c*c))/(2*a*b));
C = acos(((c*c)+(b*b)-(a*a))/(2*c*b));

circenterx = ((x1*sin(2*A))+(x2*sin(2*B))+(x3*sin(2*C)))/(sin(2*A)+sin(2*B)+sin(2*C));
circentery = ((y1*sin(2*A))+(y2*sin(2*B))+(y3*sin(2*C)))/(sin(2*A)+sin(2*B)+sin(2*C));
obj2.drawcircle(circenterx,circentery,cerradius);
delay(1000);

closegraph();
system("clear");
return 0;
}
----------------------------------------------------------------------------------------------------------------------------------

Comments

Popular posts from this blog

Implement C++ program for expression conversion as infix to postfix and its evaluation using stack.

Write C++ program to maintain club member‘s information using singly linked list. Store student PRN and Name.

Write C++/Java program for line drawing using DDA or Bresenhams algorithm with patterns such as solid, dotted, dashed, dash dot and thick.