私は次の方法でデータ構造をしたい:球の表面上の近点を照会するための高速アルゴリズム/データ構造とは何ですか?
insert :: Point3D -> a -> SphereMap a -> SphereMap a
remove :: Point3D -> a -> SphereMap a -> SphereMap a
query :: Float -> Point3D -> SphereMap a -> [a]
insert
とremove
はquery
は角度やポイントを受け取り、そして内にあるすべての値のリストを返し、データ構造に3Dインデックス値を追加原点(0,0,0)に対する点のその角度距離。
このような要件には、どのような種類のデータ構造が存在しますか?
したがって、原点は常に同じですか? – Bergi
私の 'manifolds'パッケージの[' ShadeTree'](http://hackage.haskell.org/package/manifolds-0.2.2.0/docs/Data-Manifold-TreeCover.html#g:6)の構造は、まさにこの種の仕事。しかし、実際には[球面の種類](http://hackage.haskell.org/package/manifolds-0.2.2.0/docs/Data-Manifold-Types.html)の点を使って3D点で作業することはありません#t:S-178-)。これは私が「ShadeTree」で正直にはまだテストしていませんが、実際のベクトル空間と同じように球でも同様に動作します。 – leftaroundabout
実際には、 'SphereMap'は、' 'PointsWeb'(http://hackage.haskell.org/package/manifolds-0.2.2.0/docs/Data-Manifold-Web.html)で表現され、' ShadeTree 'を基本的な空間ルックアップ構造として使用しますが、距離内ルックアップを実行するために使用できる追加のトポロジ情報があります。 - **これらのタイプの**どちらも 'insert'と' remove'をサポートしていません。ビルドワンスはそのままです。ポイントを変更する唯一の方法は、構造を分解してゼロから構築することです(ツリーノードは重心に基づいているため、リーフを移動すると構造全体が変化します)。 – leftaroundabout