检查边缘是否作圆周运动

时间:2019-07-04 10:14:20

标签: geometry processing

我想让点程序在到达边缘时掉转

所以基本上我只是简单地计算一下 x = width/2+cos(a)*20; y = height/2+sin(a)*20; 它做圆周运动。所以我想通过检查边缘使其转身。我还已经使用println命令确保y达到if条件

class particles {
float x, y, a, r, cosx, siny;
particles() {
x = width/2; y = height/2; a = 0; r = 20;
}
void display() {
ellipse(x, y, 20, 20);
}
void explode() {
a = a + 0.1;
cosx = cos(a)*r;
siny = sin(a)*r;
x = x + cosx;
y = y + siny;
}

void edge() {
if (x>width||x<0) cosx*=-1;
if (y>height||y<0) siny*=-1;
 }
}   
//setup() and draw() function

particles part;
void setup(){
size (600,400);
part = new particles();
}
void draw(){
background(40);
part.display();
part.explode();
part.edge();
}

他们只是忽略if条件

1 个答案:

答案 0 :(得分:3)

您的检查没有问题,问题在于以下事实:大概在下一次通过draw()时,您会通过重置cosx的值来忽略对检查所做的操作,并且siny

我建议创建两个新变量dxdy(“ d”代表“方向”),它们始终为+1和-1,并更改这些变量以响应您的边缘检查。这是一个最小的示例:

float a,x,y,cosx,siny;
float dx,dy;

void setup(){
  size(400,400);
  background(0);
  stroke(255);
  noFill();
  x = width/2; 
  y = height/2;
  dx = 1;
  dy = 1;
  a = 0;
}

void draw(){
  ellipse(x,y,10,10);
  cosx = dx*20*cos(a); 
  siny = dy*20*sin(a);
  a += 0.1;
  x += cosx; 
  y += siny;
  if (x > width || x < 0)
    dx = -1*dx;

  if (y > height || y < 0)
    dy = -1*dy;
}

运行此代码时,您会看到圆圈从边缘弹起:

enter image description here