まず、この質問は特定の言語に関連していません-私はHaxeを使用して複数のプラットフォームをターゲットにしています-したがって、擬似コードで十分です。
これが私の問題です:私はこの形式でスパース行列の記述を持っています:
edges =
[
1,1,2,1,3,1,4,1,
2,2,3,2,
3,3,4,3,5,3,
4,4,5,4,6,4,
5,5,6,5,7,5,25,5,27,5,28,5,29,5,30,5
];
これは、エッジの関連付けについて説明しています。
- ポイント1はポイント1、2、3、4にリンクされています
- ポイント2はポイント2と3にリンクされています
- ポイント3はポイント3、4、5にリンクされています
- ポイント4はポイント4、5、6にリンクされています
- ポイント5は、ポイント5、6、7、25、27、28、29、および30にリンクされています
これを3Dでレンダリングする必要があります。そのためには、データを「ギャップ」なしでインデックスバッファに「圧縮」する必要があります。上記の例で言うと、私は取得する必要があります:
newEdges =
[
1,2, 1, 3, 1, 4,
2,3,
3,4, 3,5,
4,5, 4,6,
5,6, 5,7, 5,8, 5,9, 5,10, 5,11, 5,12
]
したがって、それ自体をリンクしているエッジ(エッジ1-1、2-2、3-3など)を削除する必要があります(簡単)。
ポイントの順序は重要ではないため(エッジ1-2 =エッジ2-1)、重複するエッジも削除します(簡単です)。
ここで注意が必要なのは、「ギャップ」を取り除くことです。7が最高の連続値で、25が直後の値であるため、25は8になり、27は9になり、28は10になります。
今のところ、すべての値をXY座標としてプロットするBitmapDataを使用しています。次に、このビットマップの空でない垂直ストライプ(1ピクセル幅の長方形)を隣り合わせに再帰的にコピーして、一時的なビットマップに入れます。次に、横縞についても同じことを行い、最後にビットマップをスキャンして、ピクセルのX値とY値をエッジのIDとして保存します。
そしてそれは動作します!(少なくともそうです:))しかし、オーバーヘッドはひどく、入力マトリックスによっては、ビットマップを生成できない可能性があります(たとえば、フラッシュは最大4092ピクセルに制限されていますが、JSは生成しませんcopyPixelsを非常によくサポートします)。
したがって、問題は、ビットマップや言語固有のメソッドを使用せずに、この「ギャップの削除」をどのように行うかということです。
これが十分に明白であることを願って、あなたの注意に感謝します。
ニコラス