在某些情况下无法使用的内置变量(处理 3)
Built-in variables not usable in certain cases (Processing 3)
过去几天我一直在用 Processing 3 构建一个程序(自 2009 年计算机科学入门以来第一次回到 Processing)并且一直遇到这个问题:
public class PolarMap {
...
PVector[][] mapping = new PVector[width][height];
PVector[][] cartesian = new PVector[width][height];
PVector cart = new PVector();
PVector polar = new PVector();
/**
Maps every pixel on the cartesian plane to a polar coordinate
relative to some origin point.
*/
public void Map(float originX, float originY){
for (int x=0; x < width; x++){
for (int y=0; y < height; y++){
...
cart.add(x, y);
polar.add(r, theta);
mapping[x][y] = polar; ***
cartesian[x][y] = cart;
}
}
}
...
}
在 *** 的线上,我总是会抛出数组索引越界。我搜索了 SO、Reddit 和 Processing 自己的文档来找出原因。如果您不熟悉 Processing,宽度和高度都是内置变量并且等于像素高和横跨您的 canvas 的数量如 setup() 方法中声明的那样(在我的例子中为 800x800) .出于某种原因,两个数组都没有被初始化为这个值——相反,它们被初始化为这些变量的默认值:100。
所以,因为它没有意义,但那是其中之一,我尝试声明新变量:
int high = height;
int wide = width;
并用这些变量初始化数组。你不知道吗,这解决了问题。我现在有两个 800x800 阵列。
所以这是我的问题:为什么内置变量在用于初始化数组时没有按预期工作,但在分配给定义的变量时却完全按照预期的方式工作?
想想 width
和 height
变量何时获得它们的值。考虑这个示例草图:
int value = width;
void setup(){
size(500, 200);
println(value);
}
如果你 运行 这个程序,你会看到它打印 100
,即使 window 是 500
像素宽。这是因为 int value = width;
行发生 在 设置宽度之前!
为了使其按您期望的方式工作,您必须在调用 size()
函数后 设置 value
变量 。所以你可以这样做:
int value;
void setup(){
size(500, 200);
value = width;
println(value);
}
将任何初始化移动到 setup()
函数内部,在 size()
函数被调用后,你会没事的。
过去几天我一直在用 Processing 3 构建一个程序(自 2009 年计算机科学入门以来第一次回到 Processing)并且一直遇到这个问题:
public class PolarMap {
...
PVector[][] mapping = new PVector[width][height];
PVector[][] cartesian = new PVector[width][height];
PVector cart = new PVector();
PVector polar = new PVector();
/**
Maps every pixel on the cartesian plane to a polar coordinate
relative to some origin point.
*/
public void Map(float originX, float originY){
for (int x=0; x < width; x++){
for (int y=0; y < height; y++){
...
cart.add(x, y);
polar.add(r, theta);
mapping[x][y] = polar; ***
cartesian[x][y] = cart;
}
}
}
...
}
在 *** 的线上,我总是会抛出数组索引越界。我搜索了 SO、Reddit 和 Processing 自己的文档来找出原因。如果您不熟悉 Processing,宽度和高度都是内置变量并且等于像素高和横跨您的 canvas 的数量如 setup() 方法中声明的那样(在我的例子中为 800x800) .出于某种原因,两个数组都没有被初始化为这个值——相反,它们被初始化为这些变量的默认值:100。
所以,因为它没有意义,但那是其中之一,我尝试声明新变量:
int high = height;
int wide = width;
并用这些变量初始化数组。你不知道吗,这解决了问题。我现在有两个 800x800 阵列。
所以这是我的问题:为什么内置变量在用于初始化数组时没有按预期工作,但在分配给定义的变量时却完全按照预期的方式工作?
想想 width
和 height
变量何时获得它们的值。考虑这个示例草图:
int value = width;
void setup(){
size(500, 200);
println(value);
}
如果你 运行 这个程序,你会看到它打印 100
,即使 window 是 500
像素宽。这是因为 int value = width;
行发生 在 设置宽度之前!
为了使其按您期望的方式工作,您必须在调用 size()
函数后 设置 value
变量 。所以你可以这样做:
int value;
void setup(){
size(500, 200);
value = width;
println(value);
}
将任何初始化移动到 setup()
函数内部,在 size()
函数被调用后,你会没事的。