点が球の特定の距離内にあるかどうかをテストしたいと思います。点の球との距離の最適化
ですから、これらの変数を持っている...私は何ができる
Point3F spherePnt;
F32 sphereRadius;
Point3F testPnt;
...
F32 dist = (spherePnt - testPnt).len() - sphereRadius;
distのが正の場合はdistのがマイナスであれば、それは半径の外に、それが内部にあるさ半径。それは一見以来になりますが、どうやらそのは実際に与えるようにこれが見えます
またはLEN内平方根を回避するために最適化()あなたはこれを試すかもしれない機能として
...F32 dist = (spherePnt - testPnt).lenSquared() - (sphereRadius * sphereRadius);
[OK]を私は間違った結果になります
は、例えば、与えられた変数は、次のように設定されている...
SpherePnt(0, 0, 0)
SphereRadius(1)
testPnt(1, 1, 1)
は
F32 dist = (spherePnt - testPnt).len() - sphereRadius;
F32 dist2 = mSqrt((spherePnt - testPnt).lenSquared() - (sphereRadius * sphereRadius));
dist = 0.7320508075688772935274463415059;
dist2 = 0.4142135623730950488016887242097;
...の結果を取ることが数学的に、これは、実際に間違っていることはかなり明白です。それは、2の平方根が3の平方根と同じになることを期待することに還元する。だから質問は、私が推測する...
このテストを実行したいとすれば、 "点p球の範囲rの範囲内に "、平方根を避けながらこれを行う方法はありますか?
正確に。中心点までの距離の2乗と半径の2乗を比較します。 –
そして、これがあなたのすべての時間を使っている "内部ループ"であれば、一度に2つの軸^ 2を追加することでスピードアップを得ることができます。あなたが> R^2を得るとすぐに、あなたは止めることができます。 –
@Mike、素敵なアイデア、私はそれがどれほど時間を節約するのだろうと思っています(ポイントの分布に応じて - ポイントが非常に球から遠くに広がっているなら、それはかなり重要かもしれません)。 –