POV-Ray : Newsgroups : povray.general : Testing whether a shape intersects with another : Re: Testing whether a shape intersects with another Server Time
31 Jul 2024 10:20:53 EDT (-0400)
  Re: Testing whether a shape intersects with another  
From: Tim Attwood
Date: 5 Nov 2007 22:38:13
Message: <472fe1a5$1@news.povray.org>
>> what is obvious is that you missed he doesn't test for a point. He tests 
>> for an object being inside another.

This macro tests if two objects are touching with some accuracy.
You could check if an object is inside another completely by
testing against an inverse container object.

#macro collision(A B rez)
   #local result = false;
   #if (((min_extent(A).x > max_extent(B).x ) |
         (min_extent(B).x > max_extent(A).x ) |
         (min_extent(A).y > max_extent(B).y ) |
         (min_extent(B).y > max_extent(A).y ) |
         (min_extent(A).z > max_extent(B).z ) |
         (min_extent(B).z > max_extent(A).z ))=false)
      #local AB = intersection{object{A} object{B}};
      #local Mn = min_extent(AB);
      #local Mx = max_extent(AB);
      #local S1 = seed(1);
      #local Pt = VRand_In_Box(Mn, Mx, S1);
      #local cnt = 0;
      #while ((result = false) & (cnt < rez))
         #local Pt = VRand_In_Box(Mn, Mx, S1);
         #if (inside(AB, Pt))
            #local result = true;
         #end
         #local cnt = cnt + 1;
      #end
   #end
   result
#end

#declare sample1 = union {
   box {<0,0,0>,<1,1,1>}
   sphere{<0,1,0>,0.1}
   pigment{Red}
};

#declare sample2 = union {
   box {<0,0,0>,<1,1,1>}
   sphere{<1,0,0>,0.1}
   sphere{<0,0,0>,0.1}
   pigment{Blue}
   translate <-1.05,0.25,0>
};

#local result = collision(sample1 sample2 1000);


Post a reply to this message

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