POV-Ray : Newsgroups : povray.advanced-users : volume calculations : Re: volume calculations Server Time
6 Oct 2024 16:19:47 EDT (-0400)
  Re: volume calculations  
From: Tim Attwood
Date: 12 Jan 2007 23:09:57
Message: <45a85b95@news.povray.org>
Reducing the bound volume seems to keep the
errors smaller when estimating the object volume.

#macro reduce_bounding(Obj)
   #local num = 360;

   #local mn = min_extent(Obj);
   #local mx = max_extent(Obj);
   #local O = object{ Obj // center
      translate <-1*(mx.x-mn.x),-1*(mx.y-mn.y),-1*(mx.z-mn.z)>};
   #local BVol = (mx.x-mn.x)*(mx.y-mn.y)*(mx.z-mn.z);
   #local RotY = 0;
   #local c = 1;
   #while (c<num)
      #local OY = object{O rotate <0,(360/num)*c,0>};
      #local mn = min_extent(OY);
      #local mx = max_extent(OY);
      #local TV = (mx.x-mn.x)*(mx.y-mn.y)*(mx.z-mn.z);
      #if (BVol > TV )
         #local BVol = TV;
         #local RotY = (360/num)*c;
      #end
      #local c = c + 1;
   #end
   #local O = object{O rotate <0,(360/num)*RotY,0>};

   #local mn = min_extent(O);
   #local mx = max_extent(O);
   #local RotX = 0;
   #local c = 1;
   #while (c<num)
      #local OX = object{O rotate <(360/num)*c,0,0>};
      #local mn = min_extent(OX);
      #local mx = max_extent(OX);
      #local TV = (mx.x-mn.x)*(mx.y-mn.y)*(mx.z-mn.z);
      #if (BVol > TV )
         #local BVol = TV;
         #local RotX = (360/num)*c;
      #end
      #local c = c + 1;
   #end
   #local O = object{O rotate <(360/num)*RotX,0,0>};

   #local mn = min_extent(O);
   #local mx = max_extent(O);
   #local RotZ = 0;
   #local c = 1;
   #while (c<num)
      #local OZ = object{O rotate <0,0,(360/num)*c>};
      #local mn = min_extent(OZ);
      #local mx = max_extent(OZ);
      #local TV = (mx.x-mn.x)*(mx.y-mn.y)*(mx.z-mn.z);
      #if (BVol > TV )
         #local BVol = TV;
         #local RotZ = (360/num)*c;
      #end
      #local c = c + 1;
   #end
   #local O = object{O rotate <0,0,(360/num)*RotZ>};

   object{O}
#end


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.