2016-06-18 2 views
1

タイトルが示唆しているように、幾何学的形状の3次元座標の配列をどのように作成するのでしょうか?幾何形状を表現するナンディ配列を作成する

latva = 6 
latvb = 6 
latvc = 6 
latdiv = 20 
latvadiv = latva/latdiv 
latvbdiv = latvb/latdiv 
latvcdiv = latvc/latdiv 
lol = np.zeros((latdiv**3,4),dtype=np.float64) 
lol[:,:3] = (np.arange(latdiv**3)[:,None]//(latdiv**2,latdiv,1)*(latvadiv,latvbdiv,latvcdiv)%(latva,latvb,latvc)) 

は(8000,4)の配列を作成します。

現在、私はすでに考え出した最も簡単な形状を有しています。次に1,2,3列に沿って配列を分割すると(この質問では無意味なので4番目は無視されます)、それをプロットすると(個人的には私はpyplotを使用します)、キューブを取得します!

十分に簡単です。また、矩形に対しても機能します。

しかし、私はそれ以上の進歩を遂げるための控えめなアイデアはありませんでした。例えば、菱形を描いています。

私は球のような黒い魔法に興味がありません。あなたの標準的な菱形/ Rhomboid /平行六面体/ Whatever_you_want_to_call_itのようなもの。

これを達成するためのアイデアはありますか?

+0

最後の行では、ピタニックアブラカドブラとは何ですか?キューブ内の規則的な格子点の3D座標で配列を塗りつぶす?立方体の表面で?縁で? – MBo

+0

@MBoここで説明します。 http://stackoverflow.com/a/37780768/4999890申し訳ありませんが、モバイルでクリック可能なリンクを作成できません。 – MadisonCooper

+0

3つの変数はどこかで定義されていませんlatvadiv、latvbdiv、latvcdiv –

答えて

0

角型または立方体でポイントを生成する便利な方法が既にあるので、2Dケースの平行四辺形と3Dケースの平行四辺形を作成する最も簡単な方法は、アフィン変換を適用して新しいポイント座標を計算することです。

たとえば、(-centerX、-centerY)による平行移動、Pi/4による回転、軸に沿ったスケーリング(必要な場合)、および必要な位置への平行移動の組み合わせとして行列を見つけることができます。

AffMatrix = ShiftMatrix * RotateMatrix * ScaleMatrix * BackShiftMatrix 
for each point coordinates: 
    (NewX, NewY) = (AffMatrix) * (X, Y) 

Rhomboidには、せん断変形も含まれます。

私は、numpyにアフィン行列を作成し、結合(乗算)するためのすぐに使えるルーチンがあると思います。

関連する問題