Created
February 22, 2020 19:09
-
-
Save MinSomai/e76a1cb44b652d63691a2ce57129030e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package hw; | |
import java.applet.*; | |
import java.awt.*; | |
import java.util.*; | |
public class LineClipping13 extends Applet { | |
int xmax=60, ymax=60, xmin=10, ymin=5; | |
public int[] set(int x,int y){ | |
int arr[]=new int[4]; | |
if(x < xmin) { | |
arr[3] = 1; | |
} | |
else { | |
arr[3] = 0; | |
} | |
if(x < xmax) { | |
arr[2] = 1; | |
} | |
else { | |
arr[2] = 0; | |
} | |
if(y < ymin) { | |
arr[0] = 1; | |
} | |
else { | |
arr[0] = 0; | |
} | |
if(y > ymax) { | |
arr[1] = 1; | |
} | |
else { | |
arr[1] = 0; | |
} | |
return arr; | |
} | |
boolean check(int arr[]) { | |
for(int i = 0; i<arr.length; i++) { | |
if(arr[i]==1) { | |
return false; | |
} | |
} | |
return true; | |
} | |
int[] produceXY(int i, int x1, int y1, float m) { | |
int arr[]=new int[2]; | |
float x=0, y=0; | |
switch(i) { | |
case 1: | |
x = xmin; | |
y = y1+m*(x-x1); | |
break; | |
case 2: | |
x = xmax; | |
y=y1+m*(x-x1); | |
break; | |
case 3: | |
y = ymin; | |
x = x1+(y-y1)/m; | |
break; | |
case 4: | |
y = ymax; | |
x = x1+(y-y1)/m; | |
break; | |
} | |
arr[0] = (int) x; | |
arr[1] = (int) y; | |
return arr; | |
} | |
boolean arrAND(int arr[],int arr2[]){ | |
for(int i=0; i<arr.length; i++) { | |
int k = arr[i] & arr2[i]; | |
if(k==1) { | |
return false; | |
} | |
} | |
return true; | |
} | |
public void paint(Graphics g) { | |
g.drawRect(xmin, ymin, xmax-xmin, ymax-ymin); | |
g.drawRect(xmin+100, ymin, xmax-xmin,ymax-ymin); | |
int arr[][] = new int[3][4]; | |
int arr2[][] = new int[3][4]; | |
int arr3[] = new int[4]; | |
int arr31=30; | |
int x1=50,y1=50,x2=30,y2=90; | |
float m=(y2-y1)*1.0f/(x2-x1); | |
g.drawString(m+"",100,100); | |
g.drawLine(x1,y1,x2,y2); | |
arr[0]=set(x1,y1); | |
arr[1]=set(x2,y2); | |
g.drawString(Arrays.toString(arr[0]),500,500); | |
g.drawString(Arrays.toString(arr[1]), 500,500); | |
if(check(arr[0])&&check(arr[1])) { | |
g.drawLine(x1, y1, x2, y2); | |
} | |
else { | |
if(arrAND(arr3,arr3)) { | |
for(int i=arr[0].length-1;i>=0;i--) { | |
if(arr[0][i]==1) { | |
arr3=produceXY(arr[0].length-1,x1,y1,m); | |
arr2[0]=set(arr3[0],arr3[1]); | |
g.drawString("first"+Arrays.toString(arr2[0]),500,500+arr31); | |
if(check(arr2[0])) { | |
x1=arr3[0]; | |
y1=arr3[1]; | |
break; | |
} | |
arr31+=20; | |
} | |
} | |
for(int i=arr[0].length-1;i>=0;i--) { | |
if(arr[1][i]==1) { | |
arr3=produceXY(arr[0].length-1-i,x1,y1,m); | |
arr2[1]=set(arr3[0],arr3[1]); | |
g.drawString("second"+Arrays.toString(arr2[1]),500,500+arr31); | |
if(check(arr2[1])) { | |
x2=arr3[0]; | |
y2=arr3[1]; | |
break; | |
} | |
} | |
} | |
g.drawLine(x1+100, y1, x2+100, y2); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment