POV-Ray : Newsgroups : povray.general : How to check if two objects have any intersection? : Re: How to check if two objects have any intersection? Server Time
25 Apr 2024 20:11:41 EDT (-0400)
  Re: How to check if two objects have any intersection?  
From: Alain Martel
Date: 31 Jan 2020 12:01:23
Message: <5e345d63$1@news.povray.org>
Le 2020-01-30 à 17:35, Bald Eagle a écrit :
> 
> "Kima" <nomail@nomail> wrote:
> 
>> but apparently, trace return a vector, when if statement needs a numeric
>> expression.
> 
> Well, since trace {} returns <0, 0, 0> as the surface normal if it misses the
> object, then you can just add together the x, y, and z components of the vector
> to give a scalar value.  Use abs() so nothing cancels out.
> 
> #declare TraceBool = abs(Normal.x)+abs(Normal.y)+abs(Normal.z);
> 
>
http://news.povray.org/povray.binaries.tutorials/thread/%3Cweb.51f61e827603294573fc9ebb0%40news.povray.org%3E/
> 
> Gonna be tricky with CSG to look at the right place and get an accurate result.
> If they are curves / algebraic surfaces, then I might see about doing the math
> to see if there are any intersection points.
> 
> Just curious - what if you did:
> intersection {
>       ObjectA
>       ObjectB
> }
> and computed the volume of the bounding box?
> 
> At the very least, if you're "scanning" with trace{}, then it would give you a
> much smaller, and accurate volume to focus on.
> 
> 

You can test for the length of the normal vector.
If the trace encounter a surface, the length is 1. If it miss, the 
length is zero.

So, it become :
#declare TraceBool = vlength(Normal);


Post a reply to this message

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