如何在数组中绘制线条?

时间:2014-06-17 06:46:53

标签: arrays drawing line processing

我希望存储鼠标轨迹(或其他可视数据),而不会将其绘制到屏幕上。

如何执行以下操作,但将显示数据保存到Arrary中,以免它被吸引到舞台上?

line(mouseX, mouseY, pmouseX, pmouseY);

我怀疑我需要在每个draw()之间切换不同的显示数据:

  • 清除屏幕
  • 加载目标显示数据
  • 绘制到屏幕
  • 存储回目标数据

我不知道该怎么做,或者是否有更好的方法。

2 个答案:

答案 0 :(得分:3)

@Majlik的例子很酷(投票)。只是要补充一点,如果您只想存储数据,则不需要PGraphic。您可以使用PVector将数据存储在mouseMoved()中。

这是我的尝试;)

ArrayList <PVector> points = new ArrayList <PVector>();
boolean print = false;

void setup(){
  size(400,400);
  background(255);
}


void draw(){
  if(print && points.size()>1){
    for(int i = 0; i < points.size()-1; i++){
      float stX =  points.get(i).x;
      float stY =  points.get(i).y;
      float ndX =  points.get(i+1).x;
      float ndY =  points.get(i+1).y;

      line(stX, stY, ndX, ndY);
    }
    print = false;
  }
}


void mouseMoved(){
  points.add(new PVector (mouseX, mouseY));
}


void keyPressed(){
  if(key == ' ' ){
    background(255);
    print = true;
  }
}

答案 1 :(得分:2)

使用PGraphics在不同的显示中绘制线条(您可以通过按任意键打开/关闭它)和Arraylist来存储鼠标的位置,您可以实现以下目的:

PGraphics pg;
ArrayList<Integer> points = new ArrayList();
boolean visible = true;

void setup() {
  size(400, 400);
  pg = createGraphics(width, height);
}

void draw() {
  background(100);

  if(points.size() >= 100){
    points.remove(0);
    points.remove(1);
  }  
  points.add(mouseX);
  points.add(mouseY);

  pg.beginDraw();
  pg.background(100);
  for(int i = 2; i < points.size()-4; i += 2){
    pg.stroke(255/100*(i+1));
    pg.line(points.get(i), points.get(i+1), points.get(i+2), points.get(i+3));
  }
  pg.endDraw();

  if(visible)
    image(pg, 0, 0);  
}

void keyPressed() {
  visible = !visible;
}