Новичок в 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)**
}
Это в основном рисунок графика движения, обнаруженного по оси Y с использованием датчика Leap Motion. Вывод выглядит следующим образом:
В конце концов мне нужно сделать что-то подобное, чтобы определить амплитуду, а не скорость одновременно по всем трем осям, а не только по оси y.
Меня действительно смущает использование Map и Translate. Я прочитал определения этих функций на веб-сайте Processing, поэтому знаю, что это такое и синтаксис, но чего я не понимаю, так это почему?! (что, пожалуй, самая важная часть.
Я спрашиваю, может ли кто-нибудь привести простые примеры, объясняющие ПОЧЕМУ использование этих двух функций. Например, для программы, которой нужно выполнить A, B и C с данными foo, y и x, вы должны использовать Map или Translate, потому что A, B и C.
Я думаю, что руководства по программированию часто упускают из виду этот важный факт, но для меня очень важно правильно понять функцию.
Бонусные баллы за объяснение:
for (Integer val : values) and LinkedList<Integer> values;
(не могу найти документацию на сайте обработки для них)
Спасибо!