我是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();
}
}
答案 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应该将其缩小到一个特定问题(如何从数组中获取总数),而不是完成整个目标。