Saturday, October 26, 2013

SUTHERLAND HODGEMAN POLYGON CLIPPING ALGORITHM IN JAVA

/*
TOPIC: SUTHERLAND HODGEMAN POLYGON CLIPPING
*/

import java.awt.*;
import java.applet.*;
import java.math.*;
import java.io.*;
import java.util.*;

public class Polyclip extends Applet
{

Scanner d=new Scanner(System.in);
public void paint(Graphics g)
{
int a[];
int b[];
int k=0;
System.out.println("Enter no. of points ");
int n=d.nextInt();
a=new int[n];
b=new int[n];
for(int i=0;i<n;i++)
{
System.out.println("Enter value of x : ");
a[i]=d.nextInt();
System.out.println("Enter value of y : ");
b[i]=d.nextInt();
}
g.drawPolygon(a,b,n);

System.out.println("Enter value of x(min) : ");
int xmn=d.nextInt();
System.out.println("Enter value of y(min) : ");
int ymn=d.nextInt();
System.out.println("Enter value of x(max) : ");
int xmx=d.nextInt();
System.out.println("Enter value of y(max) : ");
int ymx=d.nextInt();

g.drawLine(xmn,ymn,xmx,ymn);
g.drawLine(xmn,ymx,xmx,ymx);
g.drawLine(xmn,ymn,xmn,ymx);
g.drawLine(xmx,ymn,xmx,ymx);

for(int i=0;i<4;i++)
{
if(b[i]>ymx)
{
int temp=b[i];
b[i]=ymx;
a[i]= a[i] +(((a[i+1]-a[i])/(b[i+1]-temp))*(b[i]-temp));
}
else if(b[i]<ymn)
{
int temp=b[i];
b[i]=ymn;
a[i]= a[i] +(((a[i+1]-a[i])/(b[i+1]-temp))*(b[i]-temp));

 }
else if(a[i]>xmx)
{
 int temp=a[i];
 a[i]=xmx;
 b[i]=b[i]+(((b[i+1]-b[i])/(a[i+1]-a[i]))*(a[i]-temp));
}
else if(a[i]<xmn)
{
 if(a[i]==a[i+1])
 {
 k=a[0];
a[i]=xmn;
b[i]=b[i];
 }
else  if(a[i+1]<xmn)
  {
   a[i]=xmn;
b[i]=ymx;
}
 else
{
int temp=a[i];
 a[i]=xmn;
 b[i]=b[i]+(((b[i+1]-b[i])/(a[i+1]-a[i]))*(a[i]-temp));
 }
}
 }
if(b[n-1]>ymx)
{
int temp=b[n-1];
b[n-1]=ymx;
a[n-1]= a[n-1]+(((a[0]-a[n-1])/(b[0]-temp))*(b[n-1]-temp));
}
else if(b[n-1]<ymn)
{
int temp=b[n-1];
b[n-1]=ymn;
a[n-1]= a[n-1] +(((a[0]-a[n-1])/(b[0]-temp))*(b[n-1]-temp));

 }
else if(a[n-1]>xmx)
{
 int temp=a[n-1];
 a[n-1]=xmx;
 b[n-1]=b[n-1]+(((b[0]-b[n-1])/(a[0]-a[n-1]))*(a[n-1]-temp));
}
else if(a[n-1]<xmn)
{
 if(a[n-1]==a[0])
 {
 int temp=a[n-1];
a[n-1]=xmn;
b[n-1]=ymn;
 }
else if(a[0]<xmn)
  {
   a[n-1]=xmn;
   b[n-1]=ymx;
}
 else
{
 int temp=a[n-1];
 a[n-1]=xmn;
 b[n-1]=b[n-1]+(((b[0]-b[n-1])/(k-a[n-1]))*(a[n-1]-temp));
 }
 }

for(int i=0;i<n;i++)
{
a[i]=a[i]+400;
b[i]=b[i]+400;
}
g.drawPolygon(a,b,n);
ymn+=400;
ymx+=400;


xmn+=400;
xmx+=400;


g.drawLine(xmn,ymn,xmx,ymn);
g.drawLine(xmn,ymx,xmx,ymx);
g.drawLine(xmn,ymn,xmn,ymx);
g.drawLine(xmx,ymn,xmx,ymx);

}
}

/*
<applet code="Polyclip.class" width="1000" height="1000">
</applet>
*/

No comments:

Post a Comment