このコードの理解に取り組んでいる 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 軸上で検出された動きのグラフを描画します。出力は次のようになります。
最終的には、y軸だけでなく3軸すべてで速度ではなく振幅を同時に検出する、これと同様のことを行う必要があります。
Map と Translate の使用は、私を本当に混乱させます。Processing の Web サイトでこれらの関数の定義を読んだので、それらが何であるかと構文はわかっていますが、理解できないのはその理由です?! (これは間違いなく最も重要な部分です。
これら 2 つの関数を使用する理由を説明する簡単な例を誰かが提供できるかどうかを尋ねています。たとえば、データ foo、y、および x を使用して A、B、および C を実行する必要があるプログラムがある場合、A、B、および C であるため、Map または Translate を使用します。
プログラミングガイドはこの重要な事実を見落としがちだと思いますが、関数を真に理解することは私にとって非常に重要です。
説明のボーナスポイント:
for (Integer val : values) and LinkedList<Integer> values;
(これらの処理Webサイトでドキュメントを見つけることができません)
ありがとう!