私は単純な剛体シミュレーションを書くことによってJuliaを学んできましたが、私は変数の割り当てと変更についてまだまだ混乱しています。配列の配列の最初の要素を指すようにベクトルの要素を設定するにはどうすればよいですか?
私は体の形状を構成する点を配列の配列に格納しています。ここでは、1つのベクトルが点のx、y、z座標を保持します。 PyPlotでボディをプロットするために、ポイントはまずローカル座標からワールド座標に変換され、ポイントのx、y、z座標をそれぞれ保持する3つの配列に割り当てられます。私は3つの配列は、値のコピーを持つ代わりに配列の値の配列を参照するようにしたいと思います。
は私のコードの関連部分は、彼らが真と評価===持つ要素をbody_to_world()を呼び出すと確認した後、この
type Rigidbody
n::Integer
k::Integer
bodyXYZ::Array{Array{Float64,1},2}
worldXYZ::Array{Array{Float64,1},2}
worldX::Array{Float64,2}
worldY::Array{Float64,2}
worldZ::Array{Float64,2}
Rotmat::Array{Float64,2}
x::Array{Float64,1}
end
# body.worldXYZ[1,1] = [x; y; z]
# and body.worldX[1,1] should be body.worldXYZ[1,1][1]
function body_to_world(body::Rigidbody)
for j in range(1, body.k)
for i in range(1, body.n)
body.worldXYZ[i,j] = body.x + body.Rotmat*body.bodyXYZ[i,j]
body.worldX[i,j] = body.worldXYZ[i,j][1]
body.worldY[i,j] = body.worldXYZ[i,j][2]
body.worldZ[i,j] = body.worldXYZ[i,j][3]
end
end
return nothing
end
のように見えますが、私はその後、例えば
body.worldXYZ[1,1][1] = 99.999
を設定した場合
変更はbody.worldXに反映されません。問題はおそらく些細なことですが、私のコードからわかるように、私は初心者であり、助けを借りることができます。
ありがとうございました!ポイントのタイプを使用することは、私が考えてきたことですが、これまでには得られていません。あなたは不変の選択について精緻化することができますか? – Boxed
さて、私はRefの配列を作成しようとしましたが、まだ更新されません。 – Boxed
変更不可能とは、値を変更できないことを意味します。したがって、Pointの 'x'を変更する代わりに、新しい' Point'を作成する必要があります。しかし、この選択により、コンパイラは基本的にコンパイラが "オーバーヘッド"を最小限に抑えることができますが(小さなビットがありますが、v0.6の変更はそれを修正しています)、immutablesを使用するとすべてが構文的な砂糖になり、パフォーマンスを犠牲にする。変更可能な型は変更可能です(配列は可変型です)ので、最適化することはできません。 –