[英]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.