Как я могу нарисовать линию в массиве?

#arrays #drawing #line #processing

#массивы #рисование #строка #обработка

Вопрос:

Я хотел бы сохранить след мыши (или другие визуальные данные), не выводя его на экран.

Как я могу сделать следующее, но сохранить отображаемые данные в Arary, чтобы они не отображались на сцене?

 line(mouseX, mouseY, pmouseX, pmouseY);
  

У меня есть подозрение, что мне нужно переключаться между различными отображаемыми данными при каждом рисовании () с помощью:

  • очистка экрана
  • загрузка данных целевого отображения
  • рисование на экране
  • сохранить обратно в целевые данные

Я еще не уверен, как это сделать, или есть ли лучший подход.

Ответ №1:

пример @Majlik действительно классный (проголосовал). Просто добавлю, что вам не нужна PGraphic, если вы хотите только сохранить данные. И вы можете использовать PVector для хранения данных в mouseMoved().

вот моя попытка 😉

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

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


void draw(){
  if(print amp;amp; 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. Использование PVector — более чистое решение 🙂

Ответ №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;
}
  

Комментарии:

1. Я еще не читал о PGraphic, спасибо! Возможность рисовать непосредственно на объекте — это именно то, что мне было нужно.