This function checks intesection of solid cube and solid 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 solidSphereCubeOverlap(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
integer :: i
real(kind=rk) :: dmin
! -------------------------------------------------------------------------!
!minimum distance
dmin = 0.0_rk
rsqr = sphere%radius**2
do i=1,3
if ( sphere%origin(i) < cube%origin(i) ) then
dmin = dmin + ( sphere%origin(i) - cube%origin(i) )**2
else if ( sphere%origin(i) > cube%endPnt(i) ) then
dmin = dmin + ( sphere%origin(i) - cube%endPnt(i) )**2
end if
end do
overlap = (dmin <= rsqr)
end function solidSphereCubeOverlap