我在处理草图中有一个线段和一个圆圈。在草图中,圆圈找到线段上的最近点,并创建另一条线以显示最近点。我希望圆圈越过这条线移向最近的点。 此外,我希望圆圈能够找到线段本身的最近点,但我现在的草图就好像线条一直在继续。任何帮助表示赞赏。
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 :(得分:0)
如果你有两个分数,你可以使用lerp()
函数获得它们之间的一系列分数。
以特定增量计算两个数字之间的数字。
amt
参数是在两个值之间插值的量,其中0.0等于第一个点,0.1非常接近第一个点,0.5是中间的一半,等等。这个lerp函数便于创建运动沿直线路径和绘制虚线。
您可以在多次调用amt
函数之间创建一个用作draw()
参数的变量。然后随着时间的推移增加该变量以移动该点,并在那里绘制圆圈。