如何在处理中拖动曲线

时间:2013-11-25 07:12:00

标签: java processing curves

我有一个xy情节,其中我有一条直线。我可以使用mouseX和mouseY值拖动线条,但我想为曲线执行此操作。

首先我如何制作曲线,当我只有一个点的坐标时,我该怎么拖呢?

1 个答案:

答案 0 :(得分:1)

@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;
}
相关问题