我有一个 xy 图,其中有一条直线。我可以通过使用 mouseX 和 mouseY 值来拖动线条,但我想对曲线执行此操作。
首先,当我只有一个点的坐标时,如何制作曲线,然后如何拖动它?
我有一个 xy 图,其中有一条直线。我可以通过使用 mouseX 和 mouseY 值来拖动线条,但我想对曲线执行此操作。
首先,当我只有一个点的坐标时,如何制作曲线,然后如何拖动它?
首先阅读@Petros 提到的链接,然后您需要计算控制点的坐标,以便它们位于您的线上。然后你必须为拖动点实现鼠标事件。您可以从这个基本示例中得到启发。
float[] p = { 50, 100, 80, 100, 150, 100, 180, 100 };
int point = 0;
boolean locked = false;
void setup() {
size(300, 200);
smooth();
}
void draw() {
background(255);
stroke(0);
noFill();
//Here you can just change from bazier to spline curve
//curve(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
bezier(p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
noStroke();
fill(255, 0, 0);
ellipse(p[0], p[1], 3, 3);
ellipse(p[6], p[7], 3, 3);
fill(0, 0, 255, 192);
ellipse(p[2], p[3], 3, 3);
ellipse(p[4], p[5], 3, 3);
}
void mousePressed() {
if(overPoint(mouseX, mouseY)) {
locked = true;
} else {
locked = false;
}
}
void mouseDragged() {
if(locked) {
p[point] = mouseX;
p[point+1] = mouseY;
}
}
void mouseReleased() {
locked = false;
}
boolean overPoint(float x, float y){
for(point = 0; point < 7; point += 2){
if(p[point] + 2 > x && p[point] - 2 < x){
if(p[point+1] + 2 > y && p[point+1] - 2 < y){
return true;
}
}
}
return false;
}