0

ここで何か基本的なことが欠けていますが、すべての調査から何を見つけることができないようです。

csv ファイルをインポートし、文字列を float に分割し、すべてのポイントを他のすべてのポイントに線で接続したいと考えています。私のコードは次のとおりです。

String [] data;


void setup () {
size(300, 300);
background(255);

data = loadStrings("points.csv");

for (int i = 0; i < data.length; i++) {

String [] fields = split(data[i], ',');

float t = float(fields[0]);
float n = float(fields[1]);
float x = float(fields[2]);
float y = float(fields[3]);

ellipse(x, y, 10, 10);

line(x, y, x[i], y[i]);
}
}

エラーメッセージは「式の型は配列型でなければなりませんが、浮動小数点に解決されました」です。

これは非常に基本的なことだと思いますが、なぜ x[i] または y[i] が配列型と見なされないのか理解できません。

これについて何か助けていただければ幸いです。よろしくお願いします。

サム

*更新***

points.csv ファイルからの抜粋は次のとおりです。

219185750   rabih_takkoush  20.88521    19.49821
219185716   MoustaphaAjram  100.870896  59.515259
219185709   jinanejghosh    56.886441   35.489087
219185557   MoustaphaAjram  34.870904   78.515243
219185555   Mohammad8Itani  12.8946         49.48179

私が達成しようとしているのは、さまざまなジオロケーション (col 3 = x、col 4 = y) をプロットし、すべてのポイントを他のすべてのポイントと線で結ぶことです。

次のスクリプトは、スクリプト内の配列で指定されたすべての場所をプロットします。

float[] x = { 50, 100, 150, 200,20,20 };
float[] y = { 10, 30, 20, 250,20,90 };

void setup () {

size(300, 300);
background(255);
}


void draw() {

for (int i = 0; i < x.length; i++) {
ellipse(x[i], y[i], 10, 10);

for (int j = 0; j < x.length; j++) {
line(x[j], y[j], x[i], y[i]);
}
}
}

私がやりたいことは同じことですが、csv ファイルの列 3 と 4 を読み取ります。

4

2 に答える 2

0

データを反復スコープのフロートに分割し、 line() 呼び出しでそれらがフロートと配列の両方であるかのようにアクセスしようとします。これを試して:

String[] data;
float[] x, y, t, n;

void setup () {
  size(300, 300);
  data = loadStrings("points.csv");
  int len = data.length;
  x = new float[len];
  x = new float[len];
  t = new float[len];
  n = new float[len];
  for (int i=0; i<len; i++) {
    String line = data[i];
    String[] fields = split(line, ',');
    t[i] = float(fields[0]),
    n[i] = float(fields[1]),
    x[i] = float(fields[2]),
    y[i] = float(fields[3]);
  }
  // don't put draw instructions in setup,
  // put them in draw. if you want to run once,
  // issue a noLoop() so that happens.
  noLoop();
}

void draw() {
  float prevx = x[0], prevy = y[0];
  for (int i=0, last=x.length; i<last; i++) {
    ellipse(x[i], y[i], 10, 10);
    line(prevx,prevy, x[i],y[i]);
    prevx=x[i];
    prevy=y[i];
  }
} 

ここで、CVS からのデータを、setup() の後で破棄するのではなく、スケッチ全体でアクセスできるリンクされた配列に保存しています。

于 2013-02-21T14:14:04.183 に答える
0

わかりましたので、作成した最初のコードを使用する場合、変更する必要があるのはいくつかのことだけです。ここでできることは次のとおりです。

float[] x;
float[] y;
string[] data;

void setup () {
   size(300, 300);
   background(255);

   data = loadStrings("points.csv");
   x = new float[data.length];
   y = new float[data.length];

   for (int i = 0; i < data.length; i++) {
      String [] fields = split(data[i], ',');

      float t = float(fields[0]);
      float n = float(fields[1]);
      float x = float(fields[2]);
      float y = float(fields[3]);
   }
}


void draw() {

   for (int i = 0; i < x.length; i++) {
      ellipse(x[i], y[i], 10, 10);

      for (int j = 0; j < x.length; j++) {
         line(x[j], y[j], x[i], y[i]);
      }
   }
}

本当に新しいものは何も見られないので、最初のコードと csv 用に作成したコードが混在しています。xそして実際には、主にとy変数float[]を単に ではなくas として宣言する必要がありましたfloat。しかし、ループで行うべきいくつかの変更もありました。

このコードでは、最初に配列にデータをロードし (コードで配列の値を宣言したのとまったく同じですが、今回はこれらの値をファイルから読み取ります)、前と同じように draw メソッドを呼び出します。

今すぐうまくいくことを願っています

于 2013-02-22T00:06:53.607 に答える