无法理解向量,经过几次迭代后我的对象卡住

时间:2017-02-27 10:54:19

标签: java vector processing

我试图写一个绘制有4个顶点的正方形形状的类。我希望每个顶点在drawloop中的每次迭代都有自己的速度和路径。它似乎可以工作几次迭代,直到它被卡住了#34;我很难理解为什么会这样。任何关于此的帮助或信息都是有帮助的,我怀疑我没有完全掌握正确使用向量。Heres an image of when the code is running.

void draw() {

  p.display();


  //Stop loop setting
  if (loop == 0) {
    noLoop();
  }
}

//----------------------------------------------------------------//


class Pillar
{
  PVector v1Velocity,v2Velocity,v3Velocity,v4Velocity,
          v1Pos,v2Pos,v3Pos,v4Pos,
          v1End,v2End,v3End,v4End,
          v1Acceleration,v2Acceleration,v3Acceleration,v4Acceleration,
          origin;
  float life,scale,randDegrees1,randDegrees2,randDegrees3,randDegrees4,maxVelocity;

  Pillar (float _x, float _y, float _scale) {
    scale = _scale; // scale of pillar
    origin = new PVector(_x,_y); //pillar point of origin
    v1Pos = new PVector(origin.x-(scale*1.5),origin.y); //vertex 1 start left
    v2Pos = new PVector(origin.x,origin.y-scale); //vertex 2 start top
    v3Pos = new PVector(origin.x+(scale*1.5),origin.y); //vertex 3 start right
    v4Pos = new PVector(origin.x,origin.y+scale); //vertex 4 start bottom

    v1End = new PVector(origin.x+random(50,200),origin.y-random(50,200));
    v2End = new PVector(origin.x+random(50,200),origin.y-random(50,200));
    v3End = new PVector(origin.x+random(50,200),origin.y-random(50,200));
    v4End = new PVector(origin.x+random(50,200),origin.y-random(50,200));

    randDegrees1 = random(360);
    randDegrees2 = random(360);
    randDegrees3 = random(360);
    randDegrees4 = random(360);//Fixa denna.

    v1Velocity = new PVector(cos(radians(randDegrees1)),sin(radians(randDegrees1)));
    v2Velocity = new PVector(cos(radians(randDegrees2)),sin(radians(randDegrees2)));
    v3Velocity = new PVector(cos(radians(randDegrees3)),sin(radians(randDegrees3)));
    v4Velocity = new PVector(cos(radians(randDegrees4)),sin(radians(randDegrees4)));
    maxVelocity = 5;

    life = 100;

  }


  void calculateVector() {




    v1Acceleration = PVector.sub(v1End,v1Pos);
    v1Velocity.add(v1Acceleration);

    v2Acceleration = PVector.sub(v2End,v2Pos);
    v2Velocity.add(v2Acceleration);

    v3Acceleration = PVector.sub(v3End,v3Pos);
    v3Velocity.add(v3Acceleration);

    v4Acceleration = PVector.sub(v4End,v4Pos);
    v4Velocity.add(v4Acceleration);

    v1Acceleration.setMag(life);
    v2Acceleration.setMag(life);
    v3Acceleration.setMag(life);
    v4Acceleration.setMag(life);

    v1Velocity.limit(maxVelocity);
    v2Velocity.limit(maxVelocity);
    v3Velocity.limit(maxVelocity);
    v4Velocity.limit(maxVelocity);

    v1Pos.add(v1Velocity);
    v2Pos.add(v2Velocity);
    v3Pos.add(v3Velocity);
    v4Pos.add(v4Velocity);

    life -= 1;


  }

  void display () {
    beginShape();
    stroke(0,0,0,50);
    vertex(v1Pos.x,v1Pos.y);
    vertex(v2Pos.x,v2Pos.y);
    vertex(v3Pos.x,v3Pos.y);
    vertex(v4Pos.x,v4Pos.y);
    endShape(CLOSE);
    calculateVector();


  }






}

0 个答案:

没有答案