如何从类中返回值,从Processing中的数组派生

时间:2016-02-26 20:51:38

标签: processing

我是Processing的新手。我想学习如何绘制一些我正在做的建模,所以我使用gwoptics来做。他们有一个名为RollingGraph的例子。这基本上是根据时间相关的滚动x轴绘制出你想要的任何内容。

问题是我不太明白如何让它来描绘我想要的东西。

我有一个数组,让我们说在画布上随机绘制椭圆并且每帧随机旋转。如何让滚动图绘制所有旋转的总和,可以是circle.rot?

到目前为止,我有最好的MCVE ......

import org.gwoptics.graphics.graph2D.Graph2D;
import org.gwoptics.graphics.graph2D.traces.ILine2DEquation;
import org.gwoptics.graphics.graph2D.traces.RollingLine2DTrace;



  class eq implements ILine2DEquation{
      public double computePoint(double x,int pos) {
       return mouseX;    //////HOW DO I GET THIS TO RETURN THE SUM OF circle.rot?????? 
      }
    }

    class eq2 implements ILine2DEquation{
      public double computePoint(double x,int pos) {
        return mouseY;
      }    
    }

    class eq3 implements ILine2DEquation{
      public double computePoint(double x,int pos) {
        if(mousePressed)
          return 400;
        else
          return 0;
      }    
    }

    RollingLine2DTrace roll,roll2,roll3;
    Graph2D g;


class Circle{
   public float x1; 
   public float y1;
   public float x2;
   public float y2;
   public color cB;
   public float rot;
   public float authority;
   public float fert = 1;
   public float r = x1; //radius


   public Circle(float x1, float y1, float x2, float y2, color tempcB, float rot, float authority, float fert){
          this.x1 = x1;
          this.y1 = y1;
          this.x2 = x2;
          this.y2 = y2;
          this.cB = tempcB;
          this.authority = random(255);
          this.fert = random(1);
          this.rot= random(360);
       }
    }

    public ArrayList<Circle> circles = new ArrayList<Circle>();

    void setup(){
      size(1000, 1000);
      frameRate(6);
      rectMode(CENTER);
      ellipseMode(CENTER);

      int sec = second();

      roll  = new RollingLine2DTrace(new eq() ,100,0.01f);
      roll.setTraceColour(0, 255, 0);


      roll2 = new RollingLine2DTrace(new eq2(),100,0.01f);
      roll2.setTraceColour(255, 0, 0);

      roll3 = new RollingLine2DTrace(new eq3(),100,0.05f);
      roll3.setTraceColour(255, 255, 255);

      g = new Graph2D(this, 400, 200, false);
      g.setYAxisMax(600);
      g.addTrace(roll);
      g.addTrace(roll2);
      g.addTrace(roll3);
      g.position.y = 50;
      g.position.x = 100;
      g.setYAxisTickSpacing(100);
      g.setXAxisMax(5f);
      smooth();
      background(204);

      noStroke();
      fill(255, 204,100);
           for(int i = 1; i < 48; i++){
           float r = random(100,height-200);
           float s = random(100,width-200);
           float t = 20;
           float u = 20;
           circles.add(new Circle(r,s,t,u,color(100,14,14),random(360),color(100,14,14),random(10)));
       }
    }

    void draw() {
      background(204);
      g.draw();

    for(Circle circle : circles){
      pushMatrix();
            translate(circle.x1, circle.y1);
            rotate(random(360));
            translate(-circle.x1, -circle.y1);
            fill(circle.authority);
            strokeWeight(0);
            stroke(100,0,0);
            rect(circle.x1, circle.y1, 24, 36,0, 0, 12, 18);
            popMatrix();
      }
    }

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你所要做的就是迭代实例并计算总数。

首先,您需要一个包含所有实例的数据结构。你已经说过你正在使用一个阵列,所以听起来你已经覆盖了它。您必须确保此数组在范围中用于下一步,因此这可能意味着在草图级别(不在函数或类中)声明它。

其次,您需要一个遍历数据结构中实例的for循环。您可以使用变量来累计总数。像这样:

float total = 0;
for(Circle c : yourCircleArray){
   total += c.rot;
}

你可以把它放到一个函数中,这样你就可以随时调用它。

编辑:仔细查看代码,实际上有ArrayList,而不是数组。看起来它已经在草图级别初始化了,所以你需要做的就是:

 public double computePoint() {
    float total = 0;
    for(Circle c : circles){
       total += c.rot;
    }
    return total;
 }

如果无法正常工作,请尝试通过消除您在草图顶部导入的任何库的依赖关系来创建MCVE。请记住,MCVE应该将其缩小到一个特定问题(如何从数组中获取总数),而不是完成整个目标。