2017-11-09 10 views
6

まずは、この解決策があれば謝っていますが、Three.jsとA-Frameのドキュメントも掘り下げていますスタックオーバーフローとして私が探しているものが見つかりませんでした。Three.jsのコプレーナポイントのセットから最も適合する長方形

私がしたいことは、既に同一平面上にあることがわかっているVector3のセットから最適なAフレームプレーンを作成することです。これは、平面の角度が90の倍数であれば簡単に行うことができますが、他のものとBox3sの.setFromPoints()アルゴリズムは必要な方法で動作しません。

Three.jsからA-Frameへの変換は、おそらく自分自身を処理する可能性がありますが、誰かがそれに取り組んで欲しいと思っているのであれば、それは大歓迎です。私はちょうど実際に意味をなさない矩形の平面を作成する必要があります。

ではなく、あまりにも多くの無駄なスペースと軽量化ボックス/飛行機よりも、太字の平面を作成します。

は基本的に、私はこれを行うアルゴリズムを作成したいです。

Drawing Explanation

私は完全に私はすでにやったポイントを、フィットカスタムジオメトリを作成する必要はありません。私は実際には、高さ、幅、位置、および回転属性だけを持つA-Frameプレーンを必要としています。これはあまり正確ではないと私は理解していますが、私が取り組んでいるものにははるかに理想的です。

+0

@Soronbe良好なパフォーマンスが望ましいことは明らかですが、必須ではありません。物事を働かせようとするだけです。そして、任意のセットの頂点の量は、通常約10-15ですが、最大は405です。 – Roberto

答えて

1

最初にポイントを通過する最良の線を見つける。これは「ラインフィット」と呼ばれ、http://stackoverflow.com/questions/2352256/fit-a-3d-line-to-3d-point-data-in-javaのように、これを3つではなく2つの次元で簡単に行うことができます。 https://en.wikipedia.org/wiki/Deming_regression ラインがあなたに角度を与え、ポイントの垂直距離の最小値が矩形の高さである場合、ラインへの垂直足ポイントの位置の最小値が矩形の幅になります。 または、すべての点を線の負の角度だけ回転させて、矩形の幅と高さの点のxとy成分のminmax値を計算するだけです。

1

私の以前の回答は実装が難しいかもしれません。もう一つのアイデアがあります:あなたのポイントの凸包を計算してください(https://en.wikipedia.org/wiki/Graham_scanは、単純で効率的なアルゴリズムに擬似コードを提供しています)。内側の点は関係ありません。最適な長方形は、凸包の辺の少なくとも1つと一致しなければならない。凸包の辺のすべての角度は、その角度の矩形の寸法を計算します。それから最小限にしてください。

関連する問題