如何在处理中移动一条线?

时间:2016-03-27 21:36:02

标签: java math vector processing

我在处理草图中有一个线段和一个圆圈。在草图中,圆圈找到线段上的最近点,并创建另一条线以显示最近点。我希望圆圈越过这条线移向最近的点。 此外,我希望圆圈能够找到线段本身的最近点,但我现在的草图就好像线条一直在继续。任何帮助表示赞赏。

float x1,y1,x2,y2;
float cx,cy;
float x4,y4;

void setup() {
   size(600,600);
}

void init() {
   x1 = (int)random(100,500);
   y1 = (int)random(100,500);
   x2 = (int)random(100,500);
   y2 = (int)random(100,500);
   cx = (int)random(100,500);
   cy = (int)random(100,500);   
}   

void draw() {
   background(60);
   init();
   stroke(220);
   line(x1,y1,x2,y2);
   noFill();
   ellipse(cx,cy,50,50);
   noStroke();
   fill(220,20,20);//red- center of circle
   ellipse(cx,cy,8,8);
   // calculate the point
   float k = ((y2-y1) * (cx-x1) - (x2-x1) * (cy-y1)) / 
        ((y2-y1)*(y2-y1) + (x2-    x1)*(x2-x1));
   float x4 = cx - k * (y2-y1);
   float y4 = cy + k * (x2-x1);
   fill(20,20,220); //blue - point on line segment
   ellipse(x4,y4, 8,8);
   stroke(0);
   line(cx,cy,x4,y4);
   noLoop();
}

void keyPressed() { 
   loop(); 
} 

1 个答案:

答案 0 :(得分:0)

如果你有两个分数,你可以使用lerp()函数获得它们之间的一系列分数。

  

以特定增量计算两个数字之间的数字。 amt参数是在两个值之间插值的量,其中0.0等于第一个点,0.1非常接近第一个点,0.5是中间的一半,等等。这个lerp函数便于创建运动沿直线路径和绘制虚线。

您可以在多次调用amt函数之间创建一个用作draw()参数的变量。然后随着时间的推移增加该变量以移动该点,并在那里绘制圆圈。