Class InterpolatingMicrosphere
java.lang.Object
org.apache.commons.math3.analysis.interpolation.InterpolatingMicrosphere
- Direct Known Subclasses:
InterpolatingMicrosphere2D
Utility class for the
MicrosphereProjectionInterpolator
algorithm.- Since:
- 3.6
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
Microsphere "facet" (surface element).private static class
Data associated with eachInterpolatingMicrosphere.Facet
. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final double
Background value.private final double
Lowest non-zero illumination.private final int
Space dimension.private final double
Maximum fraction of the facets that can be dark.private final List
<InterpolatingMicrosphere.Facet> Microsphere.private final List
<InterpolatingMicrosphere.FacetData> Microsphere data.private final int
Number of surface elements. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
InterpolatingMicrosphere
(int dimension, int size, double maxDarkFraction, double darkThreshold, double background) Create an unitialiazed sphere.InterpolatingMicrosphere
(int dimension, int size, double maxDarkFraction, double darkThreshold, double background, UnitSphereRandomVectorGenerator rand) Create a sphere from randomly sampled vectors.protected
Copy constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
add
(double[] normal, boolean copy) Replacei
-th facet of the microsphere.private void
clear()
Reset the all thefacets
data to zero.copy()
Perform a copy.int
Get the space dimensionality.int
getSize()
Get the size of the sphere.private void
illuminate
(double[] sampleDirection, double sampleValue, double weight) Illumination.private double
Interpolation.double
value
(double[] point, double[][] samplePoints, double[] sampleValues, double exponent, double noInterpolationTolerance) Estimate the value at the requested location.
-
Field Details
-
microsphere
Microsphere. -
microsphereData
Microsphere data. -
dimension
private final int dimensionSpace dimension. -
size
private final int sizeNumber of surface elements. -
maxDarkFraction
private final double maxDarkFractionMaximum fraction of the facets that can be dark. -
darkThreshold
private final double darkThresholdLowest non-zero illumination. -
background
private final double backgroundBackground value.
-
-
Constructor Details
-
InterpolatingMicrosphere
protected InterpolatingMicrosphere(int dimension, int size, double maxDarkFraction, double darkThreshold, double background) Create an unitialiazed sphere. Sub-classes are responsible for calling theadd(double[]) add
method in order to initialize all the sphere's facets.- Parameters:
dimension
- Dimension of the data space.size
- Number of surface elements of the sphere.maxDarkFraction
- Maximum fraction of the facets that can be dark. If the fraction of "non-illuminated" facets is larger, no estimation of the value will be performed, and thebackground
value will be returned instead.darkThreshold
- Value of the illumination below which a facet is considered dark.background
- Value returned when themaxDarkFraction
threshold is exceeded.- Throws:
NotStrictlyPositiveException
- ifdimension <= 0
orsize <= 0
.NotPositiveException
- ifdarkThreshold < 0
.OutOfRangeException
- ifmaxDarkFraction
does not belong to the interval[0, 1]
.
-
InterpolatingMicrosphere
public InterpolatingMicrosphere(int dimension, int size, double maxDarkFraction, double darkThreshold, double background, UnitSphereRandomVectorGenerator rand) Create a sphere from randomly sampled vectors.- Parameters:
dimension
- Dimension of the data space.size
- Number of surface elements of the sphere.maxDarkFraction
- Maximum fraction of the facets that can be dark. If the fraction of "non-illuminated" facets is larger, no estimation of the value will be performed, and thebackground
value will be returned instead.darkThreshold
- Value of the illumination below which a facet is considered dark.background
- Value returned when themaxDarkFraction
threshold is exceeded.rand
- Unit vector generator for creating the microsphere.- Throws:
DimensionMismatchException
- if the size of the generated vectors does not match the dimension set in the constructor.NotStrictlyPositiveException
- ifdimension <= 0
orsize <= 0
.NotPositiveException
- ifdarkThreshold < 0
.OutOfRangeException
- ifmaxDarkFraction
does not belong to the interval[0, 1]
.
-
InterpolatingMicrosphere
Copy constructor.- Parameters:
other
- Instance to copy.
-
-
Method Details
-
copy
Perform a copy.- Returns:
- a copy of this instance.
-
getDimension
public int getDimension()Get the space dimensionality.- Returns:
- the number of space dimensions.
-
getSize
public int getSize()Get the size of the sphere.- Returns:
- the number of surface elements of the microspshere.
-
value
public double value(double[] point, double[][] samplePoints, double[] sampleValues, double exponent, double noInterpolationTolerance) Estimate the value at the requested location. This microsphere is placed at the givenpoint
, contribution of the givensamplePoints
to each sphere facet is computed (illumination) and the interpolation is performed (integration of the illumination).- Parameters:
point
- Interpolation point.samplePoints
- Sampling data points.sampleValues
- Sampling data values at the correspondingsamplePoints
.exponent
- Exponent used in the power law that computes the weights (distance dimming factor) of the sample data.noInterpolationTolerance
- When the distance between thepoint
and one of thesamplePoints
is less than this value, no interpolation will be performed, and the value of the sample will just be returned.- Returns:
- the estimated value at the given
point
. - Throws:
NotPositiveException
- ifexponent < 0
.
-
add
protected void add(double[] normal, boolean copy) Replacei
-th facet of the microsphere. Method for initializing the microsphere facets.- Parameters:
normal
- Facet's normal vector.copy
- Whether to copy the given array.- Throws:
DimensionMismatchException
- if the length ofn
does not match the space dimension.MaxCountExceededException
- if the method has been called more times than the size of the sphere.
-
interpolate
private double interpolate()Interpolation.- Returns:
- the value estimated from the current illumination of the microsphere.
-
illuminate
private void illuminate(double[] sampleDirection, double sampleValue, double weight) Illumination.- Parameters:
sampleDirection
- Vector whose origin is at the interpolation point and tail is at the sample location.sampleValue
- Data value of the sample.weight
- Weight.
-
clear
private void clear()Reset the all thefacets
data to zero.
-