version 0.6.0
Loading...
Searching...
No Matches
mod_shape_basic::t_shape_circle Type Reference

Circle/sphere shape.

+ Inheritance diagram for mod_shape_basic::t_shape_circle:

Public Member Functions

procedure initialize (shape)
 Initialize the shape.
 
procedure copy (shape, copy)
 Copy the shape.
 
procedure is_inside (shape, point)
 Check if a point lies inside the circle/sphere.
 
procedure get_samples_inside (shape, i, j, k, n, n_samples, samples)
 Check if a given number of point lies in the circle/sphere.
 
procedure get_distance (shape, point, distance, direction)
 Compute the distance and the direction from a point to the circle/sphere.
 
procedure ray_trace (shape, ray, has_normal, intersection_list)
 Compute the intersection between the circle/sphere and a ray.
 
- Public Member Functions inherited from type_shape::t_shape
procedure(abs_initialize_shape), deferred initialize (shape)
 Initialize the shape.
 
procedure(abs_copy_shape), deferred copy (shape, copy)
 Copy the shape.
 
procedure(abs_shape_is_inside), deferred is_inside (shape, point)
 Check if a point lies inside the shape.
 
procedure(abs_shape_get_samples_inside), deferred get_samples_inside (shape, i, j, k, n, n_samples, samples)
 Check if a given number of point lies in a shape.
 
procedure(abs_shape_get_distance), deferred get_distance (shape, point, distance, direction)
 Compute the distance and the direction from a point to the shape.
 
procedure(abs_shape_ray_trace), deferred ray_trace (shape, ray, has_normal, intersection_list)
 Compute the intersection between the shape and a ray.
 

Public Attributes

double precision radius = 0d0
 Radius of the circle.
 
double precision, dimension(3) center = 0d0
 Center of the circle.
 
- Public Attributes inherited from type_shape::t_shape
integer dimension = 2
 Dimension of the shape.
 
type(t_cg_transformationtransformation
 Transformation matrix.
 
logical is_reversed = .false.
 Swap interior/exterior sides of the shape.
 

Member Function/Subroutine Documentation

◆ copy()

procedure mod_shape_basic::t_shape_circle::copy ( class(t_shape_circle), intent(in) shape,
class(t_shape), allocatable copy )
Parameters
[in]shapecircle/sphere shape
[out]copycopied circle/sphere

◆ get_distance()

procedure mod_shape_basic::t_shape_circle::get_distance ( class(t_shape_circle), intent(in) shape,
double precision, dimension(3), intent(in) point,
double precision, intent(out) distance,
double precision, dimension(3), intent(out) direction )

If the point lies inside the circle/sphere, the distance is negative and the direction points to the closest point on the circle/sphere. If the point lies outiside the circle/sphere, the distance is positive and the direction points in the opposite direction to the closest point on the circle/sphere.

Parameters
[in]shapecircle/sphere shape
[in]pointany point
[out]distancesigned closest distance from the point to the circle/sphere
[out]directionsigned direction from the point to the closest point on the circle/sphere

◆ get_samples_inside()

procedure mod_shape_basic::t_shape_circle::get_samples_inside ( class(t_shape_circle), intent(inout) shape,
integer, intent(in) i,
integer, intent(in) j,
integer, intent(in) k,
integer, intent(in) n,
integer, intent(in) n_samples,
integer, dimension(:,:,:), intent(inout) samples )

Sample a cell of coordinates (i,j,k) with (2*n_samples+1)^d samples, where d denotes the dimension of the cell. Return a integer array samples containing the value n where the sample is inside the shape.

n_samples is called the sampling level and can take its value in range [0,∞].

Example of sampling for various sampling level:

   !!    n_samples = 0   n_samples = 1   n_samples = 2
   !!      ┏━━━━━━━┓       ×━━━×━━━×       ×━×━×━×━×
   !!      ┃       ┃       ┃       ┃       × × × × ×
   !!      ┃   ×   ┃       ×   ×   ×       × × × × ×    ...
   !!      ┃       ┃       ┃       ┃       × × × × ×
   !!      ┗━━━━━━━┛       ×━━━×━━━×       ×━×━×━×━×
   !! 
Parameters
[in,out]shapecircle/sphere shape
[in]i,j,kcoordinates of the cell
[in]nvalue to put where the sample is inside the circle/sphere
[in]n_samplessampling level (see description)
[in,out]samplesarray of the (2*n_samples+1)^d samples

◆ initialize()

procedure mod_shape_basic::t_shape_circle::initialize ( class(t_shape_circle), intent(inout) shape)
Parameters
[in,out]shapecircle/sphere shape

◆ is_inside()

procedure mod_shape_basic::t_shape_circle::is_inside ( class(t_shape_circle), intent(in) shape,
double precision, dimension(3), intent(in) point )
Parameters
[in]shapecircle/sphere shape
[in]pointany point

◆ ray_trace()

procedure mod_shape_basic::t_shape_circle::ray_trace ( class(t_shape_circle), intent(in) shape,
type(t_ray), intent(in) ray,
logical, intent(in) has_normal,
type(t_intersection_list), intent(inout) intersection_list )
Parameters
[in]shapecircle/sphere shape
[in]rayray to intersect the circle/sphere
[in]has_normallist of intersections between the ray and the circle/sphere
[in,out]intersection_listlist of intersections between the ray and the circle/sphere

The documentation for this type was generated from the following file: