我在这里缺少一些基本的东西,但我似乎无法从我的研究中找到什么。
我导入了一个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列。
答案 0 :(得分: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()之后将它们丢弃。
答案 1 :(得分: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[]
,而不仅仅是float
。但是在循环中也有一些变化。
在此代码中,首先加载数组中的数据(就像在代码中声明数组的值一样,但这次是从文件中读取这些值),然后像以前一样调用draw方法。
希望它现在有效