直線を持つ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;
}