0
我想測試一個點是否在球體的特定距離內。優化點到球體的距離測試
所以,你有這些變量...
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的平方根相同...所以問題是,我猜...
鑑於我想執行此測試,「是點p在一個球體的範圍內「,有沒有辦法做到這一點,同時避免平方根?
沒錯。將距離中心點的平方與半徑的平方進行比較。 – 2009-09-04 00:33:18
對。如果這是使用所有時間的「內部循環」,則可以通過一次添加一個^ 2來加速。只要您獲得> R^2,您就可以停止。 – 2009-09-06 20:34:02
@Mike,不錯的想法,我想知道它會節省多少時間(取決於點的分佈 - 如果點遠離球體非常分散,它可能很重要)。 – 2009-09-06 23:33:31