2016-03-27 17 views
1

Bir işlem grafiğimde bir çizgi segmentim ve bir dairem var. Çizimde daire, çizgi segmentindeki en yakın noktayı bulur ve en yakın noktayı göstermek için başka bir çizgi oluşturulur. Dairenin bu çizgide en yakın noktaya doğru hareket etmesini istiyorum. Ayrıca, dairenin, çizgi parçasının en yakın noktasını bulmasını istiyorum, ancak taslağım şu anda çizgi sonsuza kadar devam ediyormuş gibi davranıyor. Herhangi bir yardım takdir edilir. Eğer iki nokta varsaBir çemberi işleme sırasında bir çizgi boyunca nasıl hareket ettirebilirsiniz?

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

cevap

0

, aralarında noktaları bir dizi almak için lerp() işlevini kullanabilirsiniz.

Belirli bir arttırmada iki sayı arasında bir sayı hesaplar. amt parametresi, 0,0 değerinin ilk noktaya eşit olduğu, 0,1'inin ilk noktaya çok yakın olduğu, 0.5'in arada olduğu, vb. Arasındaki iki değer arasındaki enterpolasyon miktarıdır. Lerp işlevi, düz bir yol boyunca hareket oluşturmak için uygundur ve noktalı çizgiler çizmek için.

Sen draw() çalışması için birden fazla çağrı arasında amt argüman olarak kullanmak bir değişken oluşturabilirsiniz. Ardından, noktayı taşımak için bu değişkeni zamanla artırın ve dairenizi buraya çizin.

İlgili konular