我正在学习处理,并尝试使用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);
}
}
我的其他功能,例如findReal
和findImagi
,我认为是正确的。问题行上的添加应该是两个PVectors
之间的补充 - 合法操作。相反,某些事情是无效或许arrayCopy
不是我想要的深层副本吗?
不确定发生了什么。
答案 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);