为什么不旋转?

时间:2019-08-18 14:44:00

标签: java processing

我正在尝试使椭圆变为中心,并且除了在平局中且x和y的偏移发生变化之外,我无法确定它如何移动。首先,我绘制了椭圆的初始x和y位置,然后尝试计算出它与中心的距离,我想知道你们中的任何一个是否可以帮助您,将不胜感激。 ^^(此处是初学者)[IDE处理]

我不知道从极坐标系到笛卡尔坐标系的革命是怎么回事。

Heart heart = new Heart();

int h = 500;
int w = 500;

void setup(){

  size(500,500);
  heart = new Heart();
  heart.init();
  //heart.display();
}

void draw(){
  background(0);
  heart.rotate();

}

class Heart {

  float[][] pos;
  float[] dist;
  int hold;
  float xOff;
  float yOff;

  Heart(){
    hold = 10;
    dist = new float[hold];
    pos = new float[hold][hold];
  }

  void init(){
    for(int i = 0; i < hold; i++){
      for(int j = 0; j < hold; j++){
        pos[i][j] = random(0,h);
      }
    }
  }

  /*void display(){
    for (int k = 0; k < hold; k++){
      fill(0,10,255,50);
      ellipse(pos[k][0],pos[0][k],15,15);
      stroke(255);
      line(w/2,h/2,pos[k][0],pos[0][k]);
    }
  }*/

  void rotate(){
    float[] r = new float[hold];
    int theta;

    for(int k = 0; k < hold; k++){
      r[k] = dist(w/2,h/2,pos[k][0],pos[0][k]);
      for(theta = 0; theta <= TWO_PI; theta++){
        xOff = r[k] * cos(theta);
        yOff = r[k] * sin(theta);
        stroke(255);
        println(pos[k][0] + xOff);
        ellipse(pos[k][0] + xOff,pos[0][k] + yOff,15,15);
      }
    }


  }
} 


我希望椭圆旋转,没有错误。

1 个答案:

答案 0 :(得分:2)

使用类型为angle的全局变量float。在每帧中增加角度并将其传递给方法Heart.rotate()

float angle = 0.0;
void draw(){
    background(0);
    heart.rotate(angle);
    angle += 0.01;
}

方法Heart.rotate()不必每帧以一个特定的角度绘制ellipse,而不是在每个帧中以循环的方式绘制所有可能的角度。

class Heart {

    // ...

    void rotate(float theta){
        float[] r = new float[hold];

        for(int k = 0; k < hold; k++){
            r[k] = dist(w/2,h/2,pos[k][0],pos[0][k]);

            xOff = r[k] * cos(theta);
            yOff = r[k] * sin(theta);
            stroke(255);
            println(pos[k][0] + xOff);
            ellipse(pos[k][0] + xOff,pos[0][k] + yOff,15,15);
        }
    }
} 

注意,在执行全局draw()之后,显示将更新一次。方法Heart.rotate()的内部循环中没有显示的更新。