在Processing中无法从void转换为PVector

时间:2014-01-07 16:13:53

标签: processing

我正在学习处理,并尝试使用Pascal的三角形生成分形。这需要PVectors的数组。我遇到了一个我不明白的问题 - 我正在cannot convert from void to PVector

这是摘录,并非每个变量都在摘录中定义,但我认为问题可能是这样的,我不需要透露更多代码而不是显示更多代码 - 显示的代码可能只会混淆问题。

arrayCopy(points,old_points);
points = new PVector[int(pow(2, j))];
if (j == 1)
{
  points[0] = new PVector(0,0);
}
if (j == 2)
{
  points[0] = new PVector(1,0);
  points[1] = new PVector(-1,0);
}
else
{
  //j will be 3 for the THIRD term in the series
  int number_of_terms_to_fill = int(pow(j - 1, 2));
  int[] pasc = PascalTriangle(j - 1);
  float real = findReal(pasc, x, y, number_of_terms_to_fill);
  float imagi = findImagi(pasc, x, y, number_of_terms_to_fill);
  PVector v = new PVector(real, imagi);
  for (int k = 0; k < number_of_terms_to_fill; k = k + 2)
  {
    points[k] = old_points[k].add(v); //!!***PROBLEM LINE***!!!
    points[k+1] = old_points[k].sub(v); 
  }
}

我的其他功能,例如findRealfindImagi,我认为是正确的。问题行上的添加应该是两个PVectors之间的补充 - 合法操作。相反,某些事情是无效或许arrayCopy不是我想要的深层副本吗?

不确定发生了什么。

1 个答案:

答案 0 :(得分:2)

方法.add()不返回PVector(它什么都不返回,因此无效)所以你不能这样做

points[k] = old_points[k].add(v);

我想你要做的是将v添加到old_points [k]并将其传递给不会像那样工作的点[k] ......你必须这样做:

old_points[k].add(v);
points[k] = old_points[k];
old_points[k].sub(v);
points[k+1] = old_points[k];

为了使您所写的内容有效,add函数应该是这样的:

PVector add(PVector v) {
  this.x += v.x;
  this.y += v.y;
  this.z += v.z;
  return this;
}

相反,它看起来像这样:

void add(PVector v) {
  this.x += v.x;
  this.y += v.y;
  this.z += v.z;
}

编辑:在Ryan的评论如下之后,我在这里提供了另一种方法,使用静态.add()方法,它确实返回了一个PVector ......

points[k] = PVector.add(old_points[k],v);
points[k+1] = PVector.sub(old_points[k],v);