1

ポイントを作成し、それらを配列に格納したい。後でデータポイントを介して線形回帰を行うためにこれを行っています。そのため、すべてのポイントを循環できる必要があります。

ウェブ上でそのような処理を見つけることができませんでした。実際に処理することができなかったので、あなたの助けが必要です. これが私のアプローチですが、うまくいかないようです:

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);
  }
} 

ポイントを作成して配列に保存するプログラムが必要です(または、循環できる同様のもの)。

4

1 に答える 1

2

あなたのコードのほとんどは理にかなっていますが、すべてのポイントを循環してそれらを視覚化することを妨げる可能性のある問題を 2 つだけ見つけることができます。

  1. あなたの条件は、範囲外の配列インデックスに移動することです:試してくださいfor (int i = 0; i < dataPoints.size(); i++)
  2. フレームをクリアすることを忘れないでください。そうしないと、同じドットの上に何度も描画されます

Processing/Java では配列インデックスが 0 から始まることを覚えておいてください (同様に、最後のインデックスは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 命名規則に従うことをお勧めします。(例:dataPointクラスの名前をDataPointに変更し、Pointインスタンスの名前を に変更point)

于 2019-05-13T17:04:33.527 に答える