int xMax=720;
int yMax=480;
int xclipMax=540;
int yclipMax=360;
int xclipMin=180;
int yclipMin=120;
int top=0;
int bottom = 0;
int right = 0;
int left = 0;
//1001 1000 1010
//0001 0000 0010
//0101 0100 0110
int coord;
int x0, x1,x2, y0,y1,y2,x3,y3;
void setup() {
size(720, 480);
background(0);
smooth();
}
void draw() {
noFill();
stroke(random(0,255),random(0,255), random(0,255));
line(180,0,180, height);
line(540,0,540, height);
line(0,120,width, 120);
line(0,360,width, 360);
stroke(255,0, 0);
rect(180,120,360,240);
stroke(random(0,255),random(0,255), random(0,255)); // draws shapes in random colors to see the diffrent shapes.
}
void keyPressed(){
if (key=='t'){ // draws a triangle using the given triangle function
triangle(random(xMax),random(yMax),random(xMax),random(yMax),random(xMax),random(yMax));
}
if (key=='l'){ // draws a triangle with created function and clips the lines
drawTriangle();
}
}
void mousePressed(){
println("x " +mouseX+" Y "+ mouseY); // test for coordinates
if (coord==0){
x0 = mouseX;
y0 = mouseY;
point(x0,y0);
println("x " +mouseX+" Y "+ mouseY);
coord =1;
}
else if (coord==1){
x1 = mouseX;
y1 = mouseY;
println("x " +mouseX+" Y "+ mouseY);
coord =2;
}
else if (coord==2){
x2 = mouseX;
y2 = mouseY;
println("x " +mouseX+" Y "+ mouseY);
coord =3;
}
else if (coord==3){
x3 = mouseX;
y3 = mouseY;
point(x3,y3);
bezier(x0,y0,x1,y1,x2,y2,x3,y3);
println("x " +mouseX+" Y "+ mouseY);
coord =0;
println("Bezier Curve is complete ");
}
}
/***********************************************************
* Draw random Triangles with 3 lines
*/
void drawTriangle(){
float a = random(xMax);
float c = random(xMax);
float e = random(xMax);
float b = random(yMax);
float d = random(yMax);
float f = random(yMax);
lineClip(a,b,c,d);
lineClip(c,d,e,f);
lineClip(e,f,a,b);
}
/***********************************************************
* Cohen-Sutherland Line Clipping Algorithm
*/
void lineClip(float x0, float y0, float x1,float y1){
int[] coord0 = new int[4];
int[] coord1 = new int[4];
//1001 1000 1010
//0001 0000 0010
//0101 0100 0110
for(int i = 0; i <>= xclipMax) { //if greater then 540
coord0[1]=1;
print(" right ");
print(" X0 " +x0);
}
if (y0 <= yclipMin) { //if less then 120 coord0[2]=1; print(" bottom "); print(" Y0 "+ y0); } else if ( y0 >= yclipMax) { //if greater tehn 360
coord0[3]=1;
print(" top ");
print(" Y0 " +y0);
}
/***********************************************************
* Second set of points
*/
if (x1 <= xclipMin) { //if less then 180 coord1[0]=1; print(" left "); print(" X1 " +x1); } else if ( x1 >= xclipMax) { //if greater then 540
coord1[1]=1;
print(" right ");
print(" X1 " +x1);
}
if (y1 <= yclipMin) { //if less then 120 coord1[2]=1; print(" bottom "); print(" Y1 "+ y1); } else if ( y1 >= yclipMax) { //if greater tehn 360
coord1[3]=1;
print(" top ");
print(" Y1 " +y1);
}
if ((coord0[0]coord1[0]) == 0 && (coord0[1]coord1[1]) == 0 && (coord0[2]coord1[2]) == 0 && (coord0[3]coord1[3]) == 0){ // test one check if the line is inside the box
line(x0,y0,x1,y1); //draw the line freely
println("Line completley in the square ");
}
else if (((coord0[0]&coord1[0]) != 0) ((coord0[1]&coord1[1]) != 0) ((coord0[2]&coord1[2]) != 0) ((coord0[3]&coord1[3]) != 0)){
println(" Line not Drawn outside the box ");
}
else {
// huge else start
float modX0 = x0;
float modY0 = y0;
float modX1 = x1;
float modY1 = y1;
//1001 1000 1010
//0001 0000 0010
//0101 0100 0110
//clip first set of points
if (coord0[0] == 1){ //if left
if (modX0 <= xclipMin modX0 >= xclipMax){
modY0 = y0 + (y1 - y0) * (xclipMin - x0) / (x1 - x0);
modX0 = xclipMin;
println(" 0 left ");
}
}
else if (coord0[1] == 1) { //if right
if (modX0 <= xclipMin modX0 >= xclipMax){
modY0 = y0 + (y1 - y0) * (xclipMax - x0) / (x1 - x0);
modX0 = xclipMax;
println(" 0 right ");
}
}
if (coord0[2] == 1 ) { //if bottom
if (modY0 <= yclipMin modY0 >= yclipMax) {
modX0 = x0 + (x1 - x0) * (yclipMin - y0) / (y1 - y0);
modY0 = yclipMin;
println(" 0 bottom ");
}
}
else if (coord0[3] == 1){ //if top
if (modY0 <= yclipMin modY0 >= yclipMax){
modX0 = x0 + (x1 -x0) * (yclipMax - y0) / (y1 - y0);
modY0 = yclipMax;
println( "0 top ");
}
}
//1001 1000 1010
//0001 0000 0010
//0101 0100 0110
//clip first second set of points
if (coord1[0] == 1){ //if left
if (modX1 <= xclipMin modX1 >= xclipMax){
modY1 = y0 + (y1 - y0) * (xclipMin - x0) / (x1 - x0);
modX1 = xclipMin;
println(" 1 left ");
}
}
else if (coord1[1] == 1) { //if right
if (modX1 <= xclipMin modX1 >= xclipMax){
modY1 = y0 + (y1 - y0) * (xclipMax - x0) / (x1 - x0);
modX1 = xclipMax;
println(" 1 right ");
}
}
if (coord1[2] == 1 ) { //if bottom
if (modY1 <= yclipMin modY1 >= yclipMax) {
modX1 = x0 + (x1 - x0) * (yclipMin - y0) / (y1 - y0);
modY1 = yclipMin;
println(" 1 bottom ");
}
}
else if (coord1[3] == 1){ //if top
if (modY1 <= yclipMin modY1 >= yclipMax){
modX1 = x0 + (x1 -x0) * (yclipMax - y0) / (y1 - y0);
modY1 = yclipMax;
println( "1 top ");
}
}
if (modX0 >= xclipMin && modX0 <= xclipMax && modX1 >= xclipMin && modX1 <= xclipMax) { if (modY0 >= yclipMin && modY0 <= yclipMax && modY1 >= yclipMin && modY1 <= yclipMax) { line(modX0,modY0,modX1,modY1); // modded line } } } // end the huge else } // end line clip function
int yMax=480;
int xclipMax=540;
int yclipMax=360;
int xclipMin=180;
int yclipMin=120;
int top=0;
int bottom = 0;
int right = 0;
int left = 0;
//1001 1000 1010
//0001 0000 0010
//0101 0100 0110
int coord;
int x0, x1,x2, y0,y1,y2,x3,y3;
void setup() {
size(720, 480);
background(0);
smooth();
}
void draw() {
noFill();
stroke(random(0,255),random(0,255), random(0,255));
line(180,0,180, height);
line(540,0,540, height);
line(0,120,width, 120);
line(0,360,width, 360);
stroke(255,0, 0);
rect(180,120,360,240);
stroke(random(0,255),random(0,255), random(0,255)); // draws shapes in random colors to see the diffrent shapes.
}
void keyPressed(){
if (key=='t'){ // draws a triangle using the given triangle function
triangle(random(xMax),random(yMax),random(xMax),random(yMax),random(xMax),random(yMax));
}
if (key=='l'){ // draws a triangle with created function and clips the lines
drawTriangle();
}
}
void mousePressed(){
println("x " +mouseX+" Y "+ mouseY); // test for coordinates
if (coord==0){
x0 = mouseX;
y0 = mouseY;
point(x0,y0);
println("x " +mouseX+" Y "+ mouseY);
coord =1;
}
else if (coord==1){
x1 = mouseX;
y1 = mouseY;
println("x " +mouseX+" Y "+ mouseY);
coord =2;
}
else if (coord==2){
x2 = mouseX;
y2 = mouseY;
println("x " +mouseX+" Y "+ mouseY);
coord =3;
}
else if (coord==3){
x3 = mouseX;
y3 = mouseY;
point(x3,y3);
bezier(x0,y0,x1,y1,x2,y2,x3,y3);
println("x " +mouseX+" Y "+ mouseY);
coord =0;
println("Bezier Curve is complete ");
}
}
/***********************************************************
* Draw random Triangles with 3 lines
*/
void drawTriangle(){
float a = random(xMax);
float c = random(xMax);
float e = random(xMax);
float b = random(yMax);
float d = random(yMax);
float f = random(yMax);
lineClip(a,b,c,d);
lineClip(c,d,e,f);
lineClip(e,f,a,b);
}
/***********************************************************
* Cohen-Sutherland Line Clipping Algorithm
*/
void lineClip(float x0, float y0, float x1,float y1){
int[] coord0 = new int[4];
int[] coord1 = new int[4];
//1001 1000 1010
//0001 0000 0010
//0101 0100 0110
for(int i = 0; i <>= xclipMax) { //if greater then 540
coord0[1]=1;
print(" right ");
print(" X0 " +x0);
}
if (y0 <= yclipMin) { //if less then 120 coord0[2]=1; print(" bottom "); print(" Y0 "+ y0); } else if ( y0 >= yclipMax) { //if greater tehn 360
coord0[3]=1;
print(" top ");
print(" Y0 " +y0);
}
/***********************************************************
* Second set of points
*/
if (x1 <= xclipMin) { //if less then 180 coord1[0]=1; print(" left "); print(" X1 " +x1); } else if ( x1 >= xclipMax) { //if greater then 540
coord1[1]=1;
print(" right ");
print(" X1 " +x1);
}
if (y1 <= yclipMin) { //if less then 120 coord1[2]=1; print(" bottom "); print(" Y1 "+ y1); } else if ( y1 >= yclipMax) { //if greater tehn 360
coord1[3]=1;
print(" top ");
print(" Y1 " +y1);
}
if ((coord0[0]coord1[0]) == 0 && (coord0[1]coord1[1]) == 0 && (coord0[2]coord1[2]) == 0 && (coord0[3]coord1[3]) == 0){ // test one check if the line is inside the box
line(x0,y0,x1,y1); //draw the line freely
println("Line completley in the square ");
}
else if (((coord0[0]&coord1[0]) != 0) ((coord0[1]&coord1[1]) != 0) ((coord0[2]&coord1[2]) != 0) ((coord0[3]&coord1[3]) != 0)){
println(" Line not Drawn outside the box ");
}
else {
// huge else start
float modX0 = x0;
float modY0 = y0;
float modX1 = x1;
float modY1 = y1;
//1001 1000 1010
//0001 0000 0010
//0101 0100 0110
//clip first set of points
if (coord0[0] == 1){ //if left
if (modX0 <= xclipMin modX0 >= xclipMax){
modY0 = y0 + (y1 - y0) * (xclipMin - x0) / (x1 - x0);
modX0 = xclipMin;
println(" 0 left ");
}
}
else if (coord0[1] == 1) { //if right
if (modX0 <= xclipMin modX0 >= xclipMax){
modY0 = y0 + (y1 - y0) * (xclipMax - x0) / (x1 - x0);
modX0 = xclipMax;
println(" 0 right ");
}
}
if (coord0[2] == 1 ) { //if bottom
if (modY0 <= yclipMin modY0 >= yclipMax) {
modX0 = x0 + (x1 - x0) * (yclipMin - y0) / (y1 - y0);
modY0 = yclipMin;
println(" 0 bottom ");
}
}
else if (coord0[3] == 1){ //if top
if (modY0 <= yclipMin modY0 >= yclipMax){
modX0 = x0 + (x1 -x0) * (yclipMax - y0) / (y1 - y0);
modY0 = yclipMax;
println( "0 top ");
}
}
//1001 1000 1010
//0001 0000 0010
//0101 0100 0110
//clip first second set of points
if (coord1[0] == 1){ //if left
if (modX1 <= xclipMin modX1 >= xclipMax){
modY1 = y0 + (y1 - y0) * (xclipMin - x0) / (x1 - x0);
modX1 = xclipMin;
println(" 1 left ");
}
}
else if (coord1[1] == 1) { //if right
if (modX1 <= xclipMin modX1 >= xclipMax){
modY1 = y0 + (y1 - y0) * (xclipMax - x0) / (x1 - x0);
modX1 = xclipMax;
println(" 1 right ");
}
}
if (coord1[2] == 1 ) { //if bottom
if (modY1 <= yclipMin modY1 >= yclipMax) {
modX1 = x0 + (x1 - x0) * (yclipMin - y0) / (y1 - y0);
modY1 = yclipMin;
println(" 1 bottom ");
}
}
else if (coord1[3] == 1){ //if top
if (modY1 <= yclipMin modY1 >= yclipMax){
modX1 = x0 + (x1 -x0) * (yclipMax - y0) / (y1 - y0);
modY1 = yclipMax;
println( "1 top ");
}
}
if (modX0 >= xclipMin && modX0 <= xclipMax && modX1 >= xclipMin && modX1 <= xclipMax) { if (modY0 >= yclipMin && modY0 <= yclipMax && modY1 >= yclipMin && modY1 <= yclipMax) { line(modX0,modY0,modX1,modY1); // modded line } } } // end the huge else } // end line clip function
No comments:
Post a Comment