2016-03-27 15 views
1

処理スケッチに線分と円があります。スケッチでは、円は線分上の最も近い点を見つけ出し、別の線が作成されてその最も近い点を示します。私は円がこの線を越えて最も近い点に向かって移動するようにしたい。 また、円は線分自体に最も近い点を見つけたいと思っていますが、私のスケッチは行が永遠に続くかのように機能します。どんな助けもありがとうございます。あなたは2つの点を持っている場合処理中の行をどのように動かすか?

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(); 
} 

答えて

0

は、あなたがそれらの間の一連のポイントを取得するためにlerp()機能を使用することができます。

特定の増分で2つの数値の間の数値を計算します。 amtパラメータは、2つの値の間で補間する量で、0.0が最初の点に、0.1が最初の点に非常に近く、0.5が中間点に等しくなります。lerp関数は、直線のパスに沿って動きを作成するのに便利です点線を描画するために使用します。

引数として使用する変数を作成して、draw()関数を複数呼び出すことができます。その後、その変数を時間の経過とともに増加させてポイントを移動し、そこにサークルを描画します。

関連する問題