This function checks intesection of solid cube and hollow sphere
This algorithm is taken from http://tog.acm.org/resources/GraphicsGems/gems/BoxSphere.c
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_sphere_type), | intent(in) | :: | sphere | |||
type(tem_cube_type), | intent(in) | :: | cube |
function hollowSphereCubeOverlap(sphere, cube) result(overlap) ! -------------------------------------------------------------------------! !inferface variables type(tem_sphere_type), intent(in) :: sphere !< spacer geometry data type(tem_cube_type), intent(in) :: cube logical :: overlap !< return value ! -------------------------------------------------------------------------! ! local variables real(kind=rk) :: rsqr,a, b integer :: i real(kind=rk) :: dmin, dmax ! -------------------------------------------------------------------------! !minimum distance dmin = 0.0_rk !maximum distance dmax = 0.0_rk rsqr = sphere%radius**2 do i=1,3 a = ( sphere%origin(i) - cube%origin(i) )**2 b = ( sphere%origin(i) - cube%endPnt(i) )**2 dmax = dmax + max(a,b) if ( sphere%origin(i) < cube%origin(i) ) then dmin = dmin + a else if ( sphere%origin(i) > cube%endPnt(i) ) then dmin = dmin + b end if end do overlap = ( (dmin <= rsqr) .and. (dmax >= rsqr) ) end function hollowSphereCubeOverlap