processing(Javaベースの言語)には、map()
という非常に便利な関数があり、5つの引数をとります。ある範囲から別の範囲に数値を再マップします。詳細については、公式文書hereをご覧ください。他の言語のmap()(処理中)に相当するものは何ですか?
他の言語、特にJavaで同じことがわかりました。それとも、私自身の機能を作るのに最高の解決策ですか?
processing(Javaベースの言語)には、map()
という非常に便利な関数があり、5つの引数をとります。ある範囲から別の範囲に数値を再マップします。詳細については、公式文書hereをご覧ください。他の言語のmap()(処理中)に相当するものは何ですか?
他の言語、特にJavaで同じことがわかりました。それとも、私自身の機能を作るのに最高の解決策ですか?
だけ(処理引数名以下)に相当する、値を補間しています:
map(value, start1, stop1, start2, stop2) ==
((value - start1)/(stop1 - start1)) * (stop2 - start2) + start2
これはかなり簡単です、確かにあなたの価値を回します[0.0, 1.0]
の値に変換します。これは、開始または停止にどれくらいの距離があるかを示します(start1で0.0
,1.0
、stop1で)。その後、他の間隔に比例した値に変換します。
それは簡単な計算です:
static double map(double value, double start1, double stop1, double start2, double stop2) {
return (value - start1)/(stop1 - start1) * (stop2 - start2) + start2;
}
処理はオープンソースなので、GitHub hereのソースコードを見ると、これらの質問に答えることができます。
具体的には、hereは次のようになりますmap()
機能への直接リンク、次のとおりです。
static public final float map(float value,
float start1, float stop1,
float start2, float stop2) {
float outgoing =
start2 + (stop2 - start2) * ((value - start1)/(stop1 - start1));
String badness = null;
if (outgoing != outgoing) {
badness = "NaN (not a number)";
} else if (outgoing == Float.NEGATIVE_INFINITY ||
outgoing == Float.POSITIVE_INFINITY) {
badness = "infinity";
}
if (badness != null) {
final String msg =
String.format("map(%s, %s, %s, %s, %s) called, which returns %s",
nf(value), nf(start1), nf(stop1),
nf(start2), nf(stop2), badness);
PGraphics.showWarning(msg);
}
return outgoing;
}