web-dev-qa-db-ja.com

端末で3次元(またはそれ以上)のデータ構造を表す方法は?

私はベクター(既知の長さのリスト)、行列(既知の次元を持つリストのリスト)、および3、4などの作成と操作を可能にするライブラリーに取り組んでいます。order Tensors (リストのリストのリスト...既知の寸法を持つ)。

現在、1次元または2次元のデータ構造を画面に印刷するのは簡単です。しかし、ユーザーに検査のために値の3次元グリッドを表現する素晴らしい方法があるかどうか疑問に思っています。

私がこの質問をするのは、他のプログラマーが私の前に直面したであろう質問のように思われるからです。

端末で3次元以上の値のグリッドを人間が読める方法で表す方法は?

4
Qqwy

通常の2D表現を考えます(zyxの例):

000 001 002 003 004
010 011 012 013 014
020 021 022 023 024

3番目の次元が深すぎない場合(2または3など)、スキームを3Dに拡張することを検討できます。

000 001 002 003 004
  100 101 102 103 104
    200 201 202 203 204
010 011 012 013 014
  110 111 112 113 114
    210 211 212 213 214
020 021 022 023 024
  120 121 122 123 124
    220 221 222 223 224

これは、2番目(可能な場合は3番目の深さ)の列セパレーターが最初の深さの列セパレーターと揃っていないことを確認して、同じ寸法ではないことを視覚的に明確にするためです。

深度ごとに異なるカラーを使用できる場合は、異なる寸法の提案が強化されます。たとえば、最初の深さは白、2番目は緑、3番目は青です。色を好みに合わせて微調整することもできますが、明るい色から暗い色へのグラデーションスキームを使用することをお勧めします(シリーズが暗いほど、奥行きが深くなります: enter image description here

4
Christophe

Windows95でBorland C++を使用してグラフィックプログラミングを学びながら、私は何年も前に同じ状況に直面していました。キューブポイントの座標を知る必要がありました。これは私がやったようなもので、うまくいきました。

Z軸が正面に伸び、XY平面が正面を向いていて、Yが垂直であると仮定して、立方体を一連のXZ 'L'形状に分割します。次に「L」をまっすぐにして直線にしました。 「L」のコーナーは1つのYポイントであり、すべてのXおよびZポイントはそのどちらかの側になります。構造を簡単に認識できるように、Y点の境界を設定しました。この設定では、基本的にキューブを「はがした」状態になり、すべての値を検査するために、上下および上下に移動する必要があります。私は単に近くから遠く、上から下まで印刷しました。当時の数字の段落は、ある種の神秘的なエイリアンコードのように、かなりクールに見えました。最初はかなり退屈でわかりにくいようですが、すぐに慣れました。

インタラクティブにしたわけではありませんが、必要に応じて、一方をロックおよびロック解除し、もう一方の方法でトラバースする必要があります。

私は立方体や四面体のような通常の形状のみに取り組んだので、これが不規則なジャガイモ、またはより大きな寸法でどれほど効果的であるかはわかりません。

2
vin

3次元の場合、2次元と奥行きを示します。この5つの深いテンソルを考えます

5 (top)
[1, 2, 3
 5, 6, 7] 

ヒット+ズームイン1

4
[10, 11, 12
 13, 14, 15] 

打つ-トップに戻るなど.

色を追加すれば4次元も扱えると思います。しかし、グラフィックライブラリでは4を超えることは十分に困難です。しかし、複数の行列を並べて表示することもできます。

5 (top)
0,              1,
[1, 2, 3        [9, 8, 9
 5, 6, 7]        7, 7, 7]
2
Doug T.