Browse Source

MeshTools: avoid unnecessary precision loss in boundingSphereBouncingBubble()

pull/559/head
Pablo Escobar 4 years ago committed by Vladimír Vondruš
parent
commit
01f9fe1670
  1. 3
      src/Magnum/MeshTools/BoundingVolume.cpp

3
src/Magnum/MeshTools/BoundingVolume.cpp

@ -54,7 +54,8 @@ Containers::Pair<Vector3, Float> boundingSphereBouncingBubble(const Containers::
const Float ds = (p - center).dot();
if(ds > radiusSquared) {
const Float alphaInv = radius/Math::sqrt(ds);
const Float alphaSqInv = alphaInv*alphaInv;
/* Not using alphaInv*alphaInv since that may lose precision */
const Float alphaSqInv = radiusSquared/ds;
radius = (1.0f/alphaInv + alphaInv)*0.5f*radius;
center = ((1.0f + alphaSqInv)*center + (1.0f - alphaSqInv)*p)*0.5f;
radiusSquared = radius*radius;

Loading…
Cancel
Save