12

3D ポイントのリストがあります。私はそれらがすべて同一平面上にあることを知っています。それらを並べ替えたい中心と、ポイントと中心が存在する平面の法線があります。あるポイントが別のポイントの右 (または左) であるかどうかをテストするにはどうすればよいですか?

2Dでそれを行う方法を理解しています。ポイントを時計回りに並べ替えますか? 2 次元の点を比較する方法を説明します。したがって、すべてのポイントと中心をローカルの 2D 平面座標に変換する必要があると思います。どうやってやるの?この問題を解決する最も効率的な方法はありますか?

//from link:
// a and b are points
//center is the center around which to determine order
//int num = (a.x-center.x) * (b.y-center.y) - (b.x - center.x) * (a.y - center.y);
//if num=0 then they're on the same line
//if num <0 or num>0 then a is to the left or right of b

3D 共平面点を処理するためにこれをどのように適応させますか?

4

1 に答える 1

20

すべてを 2D に変換する必要はありません。

あなたは中心Cと法線nを持っています。ポイントBがポイントAから時計回りか反時計回りかを判断するには、dot( n , cross( A - C , B - C )) を計算します。結果が正の場合、BはAから反時計回りです。負の場合、BAから時計回りです。

于 2013-01-17T02:00:38.243 に答える