簡體   English   中英

如何在處理中跨圓移動圓?

[英]How to move a circle across a line in 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(); 
} 

如果有兩個點,則可以使用lerp()函數在它們之間獲取一系列點。

以特定的增量計算兩個數字之間的數字。 amt參數是在兩個值之間進行插值的量,其中0.0等於第一個點,0.1緊鄰第一個點,0.5介於第一個點的中間,依此類推。lerp函數便於沿直線路徑創建運動用於繪制虛線。

您可以在多次調用draw()函數之間創建一個用作amt參數的變量。 然后隨時間增加該變量以移動點,並在那里繪制圓。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM