Skip to content

Instantly share code, notes, and snippets.

@MinSomai
Created February 22, 2020 19:09
Show Gist options
  • Save MinSomai/e76a1cb44b652d63691a2ce57129030e to your computer and use it in GitHub Desktop.
Save MinSomai/e76a1cb44b652d63691a2ce57129030e to your computer and use it in GitHub Desktop.
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