NarraLeaf

数学

算術、丸め、乱数、ブール論理、比較——これらの pure な値ノード

Math は、値を保存するのではなく算出する場所です:算術、丸め、最小値と最大値、乱数、ブール論理、比較です。下流で数値や条件が必要になったときは、常にここのノードを使います——FlowIf 分岐、ウィジェットのサイズ、カウンターの次の値などです。パレットは Boolean と Compare の各ノードグループもこの分類に折り込んでいるため、この 3 つをまとめてこのページで説明します。

規約

  • このページのすべてのノードは Pure です。 どれも exec ピンを持ちません。それぞれ result が読み取られたときに計算され、eventfunctionmacro のいずれのグラフでも、また Blueprint Value の中でも使用できます。
  • 何もキャッシュされません。 ノードは読み取られるたびに再実行されるため、1 つのノードから出る 2 本のエッジはそのノードを 2 回評価します。+ であれば無害ですが、Random Float では無害ではありません。
  • 接続されたエッジはカードの入力欄より優先されます。 カード上にリテラル値を入力できます と記されたピンは、ノードカード上に入力欄を表示しますが、その入力欄はピンにエッジがない間しか読み取られません。
  • 有限数でないものはすべて NaN として扱われます。 数値ピンは、有限数はそのまま、truefalse10 として受け取り、数値文字列は解析して受け取ります。それ以外のもの——null、空のカード入力欄、Infinity——はすべて NaN であり、NaN を渡されたノードは NaN を出力します。1 つのオペランドが欠けているだけで、その下流のすべての結果が NaN になります。
  • integerfloat へ流れますが、逆はありません。 RoundFloorCeilinteger を出力し、これはどの float 入力にも接続できます。float 出力は integer 入力には接続できません。どちらも string 入力には接続でき、算出した数値はこの経路で Log に届きます。

算術

オペランドを 2 つ受け取り、数値を 1 つ返します。

ピン方向備考
ain · datafloatカード上にリテラル値を入力できます。
bin · datafloatカード上にリテラル値を入力できます。
resultout · datafloat
ノード結果
+blueprint.math.addab、および追加されたオペランドの合計。
blueprint.math.subtracta から b を引いた値。
×blueprint.math.multiplyab の積。
÷blueprint.math.divideab で割った値。
Moduloblueprint.math.moduloab で割った余りで、符号は a に従います:−73 では −1 になり、2 にはなりません。

+ は、5 つのうち唯一 3 つ以上のオペランドを受け取れるノードです。カード上の入力追加コントロールが in_1in_2、……を追加し、Input 3 以降というラベルが付きます。ノードは自分が持つすべてのデータ入力を合計します。上の表には、最初から用意されている 2 つのピンだけを載せています。

÷ は除数をチェックしません。ゼロで割ると Infinity または −Infinity になり、0 ÷ 0 は NaN になります。どちらも次のノードでは生き残りません——このページでは有限でない数値はすべて NaN として扱われるためです——そのため不具合は、原因となった除算から数ノード離れた場所で表面化します。まず除数を 0 と比較してください。

丸めと符号

オペランドを 1 つ受け取り、数値を 1 つ返します。

ピン方向備考
valuein · datafloatカード上にリテラル値を入力できます。
resultout · datafloat または integerRoundFloorCeilinteger を出力し、残りの 3 つは float を出力します。
ノード結果
+1blueprint.math.incrementvalue に 1 を加えた値。
−1blueprint.math.decrementvalue から 1 を引いた値。
Absblueprint.math.absvalue の絶対値で、符号は取り除かれます。
Roundblueprint.math.round最も近い整数。ちょうど半分の値は上に丸められるため、2.53 に、−2.5−2 になります。
Floorblueprint.math.floorvalue を超えない最大の整数。
Ceilblueprint.math.ceilvalue を下回らない最小の整数。

+1−1 は計算するだけで、保存はしません。カウンターを進めるには、依然として Get Var から +1 を経て Set Var へとつなぐ必要があります——Variables を参照してください。

Min と Max

ピン方向備考
ain · datafloatカード上にリテラル値を入力できます。
bin · datafloatカード上にリテラル値を入力できます。
resultout · datafloat
ノード結果
Minblueprint.math.min自分のオペランドのうち最小のもの。
Maxblueprint.math.max自分のオペランドのうち最大のもの。

どちらも + と同じ方法でオペランドを追加できます:入力追加コントロールが in_1in_2、……を追加し、比較は上記の 2 つだけでなく、ノード上のすべてのデータ入力を対象にします。いずれか 1 つのオペランドが有限数でない場合、ノードは NaN を出力します——不正なオペランドを取り除いて残りを比較する、ということはしません。

Random Float

blueprint.math.randomFloat · Pure

ピン方向備考
minin · datafloatカード上にリテラル値を入力できます。数値でない場合は 0 にフォールバックします。
maxin · datafloatカード上にリテラル値を入力できます。数値でない場合は 1 にフォールバックします。
resultout · datafloat

[min, max) の範囲で一様に分布します:min は出る可能性がありますが、max は出ません。2 つの境界値は使用前にソートされるため、大きい方の数値を min に接続しても、エラーになったり空の範囲になったりせず、同じ範囲になります。

Random Integer

blueprint.math.randomInteger · Pure

ピン方向備考
minin · dataintegerカード上にリテラル値を入力できます。数値でない場合は 0 にフォールバックします。
maxin · dataintegerカード上にリテラル値を入力できます。数値でない場合は 1 にフォールバックします。
resultout · datainteger

min から max までの整数の中で一様に分布し、両端を含みます——16 ならサイコロであり、五面体ではありません。境界値はまずソートされ、その後内側の整数に寄せられます(min は切り上げ、max は切り下げ)。それによって両者の間に何も残らない場合、結果は切り上げた min になります。

どちらの乱数ノードもシードを受け取らず、結果も記憶されません。読み取るたびに再抽選されます:1 つの Random Integer を 2 つのピンに接続すると、それぞれに異なる数値が渡され、後でもう一度読み取るとまた別の値になります。同じ数値を 2 回使う必要がある場合は、その結果を変数に書き込んでください。

Boolean

ここでの入力は boolean であり、カードにリテラルを入力できません。そのため両方のオペランドを接続する必要があります。接続されていない真偽値ピンは false として読み取られます。

ピン方向備考
ain · databooleanNot では Value というラベルが付きます。
bin · databooleanNot にはこのピンがありません。
resultout · databoolean
ノード結果
Andblueprint.boolean.and両方のオペランドが true のとき true。
Orblueprint.boolean.orどちらかのオペランドが true のとき true。
Notblueprint.boolean.nota の反転。
Xorblueprint.boolean.xorちょうど一方のオペランドだけが true のとき true。

真偽値でない入力は拒否されるのではなく変換されます。ゼロでない有限数は true、0 は false、Infinity は false です。文字列は前後の空白を除去したうえで大文字小文字を区別せずに照合されます:"true""1""yes" は true、"""false""0""no" は false、それ以外の空でない文字列はすべて true です。

Compare

EqualNot Equal は両側に any を取り、JavaScript の ===!== で比較します。変換は行われません。数値の 1 と文字列の "1" は等しくなく、内容が同じでも別々に作られた 2 つの配列も等しくありません——検査されているのは同一性です。

ピン方向備考
ain · dataany
bin · dataany
resultout · databoolean
ノード結果
Equalblueprint.compare.equalab が厳密に等しいとき true。
Not Equalblueprint.compare.notEqual等しくないとき true。

どちらのピンもカードにリテラルを入力できず、未接続のピンは何にも解決されません——そのため両方のピンが空の Equal は「何もない」同士を比較し、true を報告します。両側とも接続してください。

4 つの数値比較ノードは代わりに float を取り、このページの他の部分と同じ方法で変換を行います。

ピン方向備考
ain · datafloatカード上にリテラル値を入力できます。
bin · datafloatカード上にリテラル値を入力できます。
resultout · databoolean
ノード結果
Greater Thanblueprint.compare.greaterThanab より大きい。
Greater Than Or Equalblueprint.compare.greaterThanOrEqualab より大きいか等しい。
Less Thanblueprint.compare.lessThanab より小さい。
Less Than Or Equalblueprint.compare.lessThanOrEqualab より小さいか等しい。

どちらかのオペランドが有限数に解決できない場合、この 4 つはすべて false を出力します。このときは、ある比較とその逆の比較の両方が false になるため、一方をもう一方の否定として扱ってはいけません。反転するには、反対のノードを選ぶのではなく Not を使ってください。

記号による比較

より古い比較ノードの集まりで、既存のグラフが使用しているため登録が維持されています。形は数値の Compare ノードと同じですが、規則が異なります。

ピン方向備考
ain · datafloatカード上にリテラル値を入力できます。
bin · datafloatカード上にリテラル値を入力できます。
resultout · databoolean
ノード結果
=blueprint.math.equal2 つの数値が等しい。
blueprint.math.notEqual等しくない。
<blueprint.math.lessab より小さい。
blueprint.math.lessOrEqualab より小さいか等しい。
>blueprint.math.greaterab より大きい。
blueprint.math.greaterOrEqualab より大きいか等しい。

両方のオペランドはまず数値に変換されるため、Equal とは異なり = は数値の 1 と文字列の "1" を等しいと判断します。何を問いたいかで使い分けてください:数値としての等しさには =、同一性には Equal を使います。

どちらかのオペランドが数値でない場合、true を出力し、残りの 5 つは false を出力します。

このページの目次