3

そのため、疑似コード hereに基づいて、Brightscript への Boid の移植に取り組んでいます。

関連するデータ構造を理解しようとしています。たとえば、Velocity は単一の値ですか、それとも 3D 値ですか? (つまりvelocity={x,y,z})

疑似コードがこれを混同しているように見えますが、ベクトルと単一値項目の両方を含む方程式が含まれている場合があります。

v1 = rule1(b)
v2 = rule2(b)
v3 = rule3(b)

b.velocity = b.velocity + v1 + v2 + v3

Velocity が 3 つの値である場合、これは理にかなっていますが、よくわかりません。

それで、私の最初の質問: 上記の疑似コードに基づいて、これは単一のボイドの正しいデータ構造ですか?

boid={position:{px:0,py:0,pz:0},velocity:{x:0,y:0,z:0},vector:{x:0,y:0,z:0},pc:{x:0,y:0,z:0},pv:{x:0,y:0,z:0})

どこでpc= 知覚された中心、およびpv= 知覚された速度。

vector_addvector_subvector_div、およびベクトルのブール関数を実装しました。

この疑似コードから始めた理由は、他に読みやすいものを見つけることができなかったからですが、変数ごとにデータ構造が明示的に定義されていないため、まだ多くの疑問が残ります。

(編集)これが私が話していることの良い例です:

IF |b.position - bJ.position| < 100 THEN

両方とも 3D 座標である場合、そうb.position - b[j].positionでない限り、どのように「100 未満」と見なすことができます< {100,100,100}か?

4

2 に答える 2

3

速度

ベクトルの加算と減算の疑似コードを見ると、これらの演算は 3 次元ベクトルに対して明示的に実行されています。

PROCEDURE Vector_Add(Vector v1, Vector v2)
    Vector v
    v.x = v1.x + v2.x
    v.y = v1.y + v2.y
    v.z = v1.z + v2.z
    RETURN v
END PROCEDURE

補助機能セクションでは、次のようにも述べています。

... 上記の疑似コードのすべての加算と減算はベクトル演算です

b.velocity = b.velocity + v1 + v2 + v3 + ...したがって、3D ベクトルのベクトル加算であると想定できます。

ベクトルの大きさ

2 つのベクトルの減算はベクトル間の差と呼ばれ、新しいベクトルが生成されます。あなたの場合、みましょうdiffB = b.position - bJ.position

現在|b.position - bJ.position|は と同等であり、 「単一値」 (スカラーと呼ばれる)の絶対値ではなく、|diffB|差ベクトル の大きさをとっています。大きさは、ベクトル長またはノルムとも呼ばれます。diffB

紛らわしいのは、ベクトルの大きさが絶対値と同じ表記法で示されることです。diffB差分ベクトルもそうであり|diffB|、そのベクトルの大きさです。v大きさは、ユークリッド空間のベクトルに対して によって定義され|v| = sqrt(x1^2 + ... + xn^2)ます。

したがって、3D ベクトルの場合diffB:

|diffB| = sqrt(x1^2 + x2^2 + x3^2) = sqrt(x^2 + y^2 + z^2)

平方根の結果はスカラーなので、明らかに を満たすことができ< 100ます。


そうです、速度は 3D ベクトルvelocity = {x1, x2, x3}だと思います。boid 疑似コードを徹底的に確認していませんが、データ構造は正しいようです。

于 2012-10-21T22:38:19.903 に答える
1

ここでの表現は次のとおりです。

|b.position - bJ.position|

実際には、2 つのベクトルの差から得られるスカラーです。

このスカラーは単一の値であるため、< 100 になる可能性があります。

于 2012-10-21T22:29:44.043 に答える