0

我在这里遗漏了一些基本的东西,但我似乎无法从我的所有研究中找出什么。

我已经导入了一个 csv 文件,将字符串拆分为浮点数,现在希望用一条线将所有点连接到所有其他点。我的代码如下:

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

好的,所以如果您使用您制作的第一个代码,您只需要更改一些内容,您可以执行以下操作:

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 制作的代码之间的混合。实际上,您主要需要将xandy变量声明为,float[]而不仅仅是float. 但在循环中也有一些改变。

在此代码中,您首先将数据加载到数组中(就像您在代码中声明数组的值一样,但这次您从文件中读取这些值),然后像以前一样调用您的 draw 方法。

希望它现在有效

于 2013-02-22T00:06:53.607 回答
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 回答