13

私のアプリケーションは、地球の表面 (球体を使用すれば十分です) の形状を表すことです。それらは、ポイント、ライン、およびポリゴンです。座標は、(地理座標と同様に) 度またはラジアンを使用して定義する必要があります。

球面上の 2 点間の線分は、その大円上にある必要があります。ポリゴンは、そのような線のコレクションで構成されている必要があります。さらに、上記の形状に対して、交差、結合、差、補数などのセット - 基本操作を実行したいと思います。これらの操作は、ポイントのコレクションを出力するだけで済みます。

CGAL の3D Spherical Geometry Kernel2D Boolean Operations on Nef Polygons Embedded on the Sphereを使用して、それを理解しようとしました。実は、球体に線を引くのにはすでに問題がありました。さらに、CGAL はユークリッド空間で動作しますが、球体上に配置された大円を操作するために必要な幾何学的操作が残っています。

私の質問は、CGAL に記載されている機能を実現するのを手伝ってくれるか、それを行う C/C++ 用の別のライブラリを推奨できるかどうかです。どうもありがとうございました!

4

3 に答える 3

1

和集合/交差などの一般的なポリゴン集合演算を実行する場合は、 http: //www.cs.man.ac.uk/~toby/alan/software/から一般的なポリゴンクリッパーライブラリを調べることができます。

于 2010-07-08T14:13:20.830 に答える
1

これを見てみることをお勧めします:

http://www.codeguru.com/Cpp/Cpp/algorithms/general/article.php/c5115/

質問1Eは、2つの大円の交差の問題を解決します。これにより、CGALやGEOSのような大きな依存関係なしに、球上の形状の基本的な操作を定義できます。

于 2010-06-30T13:26:21.180 に答える
0

通常、2 つのオブジェクトの交点を見つけるには、オブジェクトを定義する方程式を互いに等しく設定する必要があります。

これはおそらくVitorの答えの別の言い回しです。

各線 (円弧) をパラメトリック方程式として定義することから始めます。良くも悪くも、これらの円弧は、正規化されたベクトルが回転したときにたどるパスとして表示されます。それが私がそれらを定義する方法です(もっと良い方法があるに違いありません)。

したがって、始点と終点をベクトルとして扱い、外積をとって回転軸を取得し、内積をとって角度を取得します。

円弧の方程式は次のようになります

arc(t) = startPoint * (axisAngleToRotationMatrix (軸、t * 角度))

次に、2 つの弧の方程式を互いに等しく設定し、結果として得られる連立方程式を、各方程式の「t」について解きます。

于 2010-07-06T23:43:06.500 に答える