Processing 的新手,致力于理解此代码:
import com.onformative.leap.LeapMotionP5;
import java.util.*;
LeapMotionP5 leap;
LinkedList<Integer> values;
public void setup() {
size(800, 300);
frameRate(120); //Specifies the number of frames to be displayed every second
leap = new LeapMotionP5(this);
values = new LinkedList<Integer>();
stroke(255);
}
int lastY = 0;
public void draw() {
**translate(0, 180)**; //(x, y, z)
background(0);
if (values.size() >= width) {
values.removeFirst();
}
values.add((int) leap.getVelocity(leap.getHand(0)).y);
System.out.println((int) leap.getVelocity(leap.getHand(0)).y);
int counter = 0;
** for (Integer val : values)** {
**val = (int) map(val, 0, 1500, 0, height);**
line(counter, val, counter - 1, lastY);
point(counter, val);
lastY = val;
counter++;
}
** line(0, map(1300, 0, 1500, 0, height), width, map(1300, 0, 1500, 0, height)); //(x1, y1, x2, y2)**
}
它基本上绘制了使用 Leap Motion 传感器在 y 轴上检测到的运动图。输出如下所示:
我最终需要做与此类似的事情,以同时检测所有 3 轴上的振幅而不是速度,而不仅仅是 y。
Map 和 Translate 的使用让我非常困惑。我已经在处理网站上阅读了这些函数的定义,所以我知道它们是什么以及语法,但我不明白为什么?!(这可以说是最重要的部分。
我在问是否有人可以提供简单的示例来解释使用这两个函数背后的原因。例如,给定一个程序需要使用数据 foo、y 和 x 执行 A、B 和 C,您将使用 Map 或 Translate,因为 A、B 和 C。
我认为编程指南经常忽略这个重要的事实,但对我来说,真正理解一个函数非常重要。
解释的奖励点:
for (Integer val : values) and LinkedList<Integer> values;
(在这些处理网站上找不到任何文档)
谢谢!