This next one was more tricky, trying to connect two bezier curves so they always flow elegantly: meant finding a way to match the slopes.
Move your mouse around it to see it in action: this may be slow depending on your java
engine.
Here's the code.
void setup() {
size(200,200);
background(255);
smooth();
}
void draw() {
background(255);
//skeleton points
stroke(0);
ellipse(0,0,5,5);
ellipse(mouseX,mouseY,5,5);
ellipse(200,200,5,5);
ellipse(100,100,5,5);
//control points
float Xvalue = 180;
float a = atan2(mouseY-height/2, mouseX-width/2); //mobile point for testing
float b = a + 2*PI; //reverse the angle
float opp = tan(b)*80; //find Y value as X is supplied (one value must be supplied, or hypotenuse)
if(degrees(a) > -90 && degrees(a) < 90) { //deal with flipping
Xvalue = 200 - Xvalue; //flip x value through the midpoint
opp *= -1; //flip Y value negative
}
println(Xvalue);
stroke(255,0,0);
ellipse(Xvalue,opp+100,5,5); //Y value from centrepoint, end points of bezier
bezier(0,0,50,10,mouseX,mouseY,100,100);
stroke(0,255,0);
bezier(100,100,Xvalue,opp+100,50,180,200,200);
stroke(0);
ellipse(50,10,5,5); //fixed control points
ellipse(180,150,5,5);
stroke(240);
line(mouseX,mouseY,Xvalue,opp+100); //connector between control points
}
No comments:
Post a Comment