2

ポイント(lonc、latc)が(lona、lata)で始まり、(lonb、latb)で終わる大円弧上にある場合にtrueを返すブールメソッドを作成しようとしています。

このメソッドがtrueを返すポイントは、このすばらしい円を見ることができるはずの場所にいる場合に、見えるセクションが表示されるようにすることです。

要点は、半径10度の小さな円で(lond、latd)にいるということです。大円と小円が交差するかどうかを調べたいと思います。複数の大円がありますが、小さな円は1つだけです。

最も簡単な方法は、小さな円の円周上の経度と緯度が大円の線上にあることを確認することだと思います。

どんな助けでも大歓迎です

4

2 に答える 2

3

3 つの緯度と経度のペア (θ a、φ a )、(θ b、φ b )、および (θ c、φ c ) があり、点 (θ c、φ c ) が決定された大円上にあるかどうかを判断したいとします。( θ a , φ a ) と (θ b , φ b ) による。たとえば、次の計算を使用してこれを実現できます。

  1. 次の式を使用して、すべての緯度と経度のペアを (x, y, z) トリプルに変換します。x = sin(θ)*cos(φ)、y = sin(θ)*sin(φ)、z = cos(θ) . これにより、3 つのトリプル ( x a、 y a 、 z a )、 (x b、y b、z b )、(x c、y c、z c ) が得られます。

  2. 点 (x a , y a , z a ), (x b , y b , z b ) と原点 (0, 0, 0)を通る平面のデカルト座標の式を決定します。式は x+b*y+c*z=0 であり、平面公式 x+b の x、y、z に点 A、B の座標を代入して得られる 2 つの連立方程式から求められるbcを求めます。 *y+c*z=0.

  3. 次の式を使用して、点 (x c、y c、z c ) と点 2 で決定された平面との間の距離を計算します: d=abs(x c +b*y c +c*z c )/sqrt(1+b *b+c*c)。

  4. デカルト座標の距離から、次の式を使用して、点 (x c、y c、z c ) と (θ a 、 φ a ) および (θ b、φ b )によって決定される大円の間の角距離を見つけることができます。: α = asin(d)。

  5. 浮動小数点数を正確に比較するべきではないため、点が大円上にあると見なすには、点が大円からどれだけ離れているかを決定する角度しきい値が必要です。次に、ポイント 4 で決定した α をしきい値と比較して、求めるブール値を導き出します。

于 2011-11-20T22:21:42.327 に答える
0

円弧をマークする点aとbを持つ球体で作業していると仮定します。そして、このスプリー上に点cがあり、cがaとbの間の円弧上にあるかどうかを確認したい...

これについては、次のことを確認できます。

  1. center-to-a と center-to-b のベクトルから形成される平面を生成する
  2. 点 c がこの平面と交差するかどうかを確認します (点が実際に球面上にあり、球面の上下ではないと仮定します)
于 2011-11-20T22:16:32.350 に答える