Как я могу создавать точки, отображать их и хранить их в каком-то массиве - PullRequest
1 голос
/ 13 мая 2019

Я хочу создать точки и затем сохранить их в массиве. Я делаю это, чтобы потом поставить линейную регрессию через мои точки данных. Поэтому я должен иметь возможность циклически проходить все мои пункты.

Я не смог найти в Интернете ничего подобного для обработки, и, поскольку я не смог этого сделать, мне нужна ваша помощь. Вот мой подход, но, похоже, он не работает:

ArrayList<dataPoint> dataPoints = new ArrayList<dataPoint>();

void setup(){
  size(1000, 1000); 
  background(255);
}
void draw(){
  for (int i = 1; i == dataPoints.size(); i++) { 
    // An ArrayList doesn't know what it is storing so we have to cast the object coming out
    dataPoint Point = dataPoints.get(i);
    Point.display();

  }  
}

void mousePressed() {
  dataPoints.add(new dataPoint(mouseX, mouseY));
}

class dataPoint {

  float x;
  float y;

  dataPoint(int tempX, int tempY) {
    x = tempX;
    y = tempY;
  }

  void display() {
    strokeWeight(10);
    stroke(255,0,0);
    point(x,y);
  }
} 

Я хотел бы иметь программу для создания точек и сохранения их в массиве (или в чем-то подобном, через который вы можете перемещаться).

1 Ответ

1 голос
/ 13 мая 2019

Большая часть вашего кода имеет смысл, есть только две ошибки, которые я могу заметить, которые могут помешать вам прокручивать все ваши точки и визуализировать их:

  1. ваше условие будет выходить за пределы индекса массива: try for (int i = 0; i < dataPoints.size(); i++)
  2. не забудьте очистить рамку, в противном случае вы будете рисовать поверх одних и тех же точек снова и снова

Помните, что индексы массива начинаются с 0 в Processing / Java (и последний индекс будет не size() вашего массива, а на 1 меньше, следовательно, < в условии for)

Вот ваш код с вышеуказанными настройками:

ArrayList<dataPoint> dataPoints = new ArrayList<dataPoint>();

void setup(){
  size(1000, 1000); 


}
void draw(){
  background(255);
  for (int i = 0; i < dataPoints.size(); i++) { 
    // An ArrayList doesn't know what it is storing so we have to cast the object coming out
    dataPoint Point = dataPoints.get(i);
    Point.display();

  }  
}

void mousePressed() {
  dataPoints.add(new dataPoint(mouseX, mouseY));
}

class dataPoint {

  float x;
  float y;

  dataPoint(int tempX, int tempY) {
    x = tempX;
    y = tempY;
  }

  void display() {
    strokeWeight(10);
    stroke(255,0,0);
    point(x,y);
  }
} 

Обратите внимание , что у Processing есть удобный класс PVector (со свойствами x, y), так что вы можете сделать что-то вроде этого:

ArrayList<PVector> dataPoints = new ArrayList<PVector>();

void setup(){
  size(1000, 1000); 
  strokeWeight(10);
  stroke(255,0,0);
  noFill();
}
void draw(){
  background(255);
  beginShape();
  for (int i = 0; i < dataPoints.size(); i++) { 
    PVector point = dataPoints.get(i);
    vertex(point.x,point.y);
  }  
  endShape();
}

void mousePressed() {
  dataPoints.add(new PVector(mouseX, mouseY));
}

Это немного мелочи, но я рекомендую следовать Java Naming Convention , чтобы сохранить код согласованным. (Например: переименование класса dataPoint в DataPoint и переименование экземпляра Point в point)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...