質問

ポイントが球体の特定の距離内にあるかどうかをテストしたいと思います。

したがって、これらの変数があります...

Point3F spherePnt;
F32 sphereRadius;
Point3F testPnt;

私はそれをできた...

F32 dist = ( spherePnt - testPnt ).len() - sphereRadius;

distが正である場合、それは半径の外側であり、distが陰性である場合、それは半径の内側にあります。

または、len()関数内の四角い根を回避するための最適化として、これを試すかもしれません...

F32 dist = ( spherePnt - testPnt ).lenSquared() - ( sphereRadius * sphereRadius );

わかりました、これは一見してから作っているように見えますが、どうやら実際に私に誤った結果を与えているようです。

たとえば、変数がこのようにセットアップされています...

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の平方根と同じであると予想することを減らします...それは、私が推測することです...

このテストを実行したいと考えていることを考えると、「球体の範囲r内のポイントPは」、平方根を避けながらこれを行う方法はありますか?

役に立ちましたか?

解決

「四角距離」アプローチでSQRT計算は必要ありません! 2つのポイント(球体中心とテストポイント)間の距離は、球形の半径よりも球半径よりも少ない場合、「球体内またはその外」をテストする唯一の目的のために、四角距離が四角い半径よりも少ない場合、その事実はありますか?違いの平方根は正方形の根の違いではなく、まったく無関係です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top