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 classMicrosphere "facet" (surface element).private static classData associated with eachInterpolatingMicrosphere.Facet. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final doubleBackground value.private final doubleLowest non-zero illumination.private final intSpace dimension.private final doubleMaximum fraction of the facets that can be dark.private final List<InterpolatingMicrosphere.Facet> Microsphere.private final List<InterpolatingMicrosphere.FacetData> Microsphere data.private final intNumber of surface elements. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedInterpolatingMicrosphere(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.protectedCopy constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidadd(double[] normal, boolean copy) Replacei-th facet of the microsphere.private voidclear()Reset the all thefacetsdata to zero.copy()Perform a copy.intGet the space dimensionality.intgetSize()Get the size of the sphere.private voidilluminate(double[] sampleDirection, double sampleValue, double weight) Illumination.private doubleInterpolation.doublevalue(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[]) addmethod 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 thebackgroundvalue will be returned instead.darkThreshold- Value of the illumination below which a facet is considered dark.background- Value returned when themaxDarkFractionthreshold is exceeded.- Throws:
NotStrictlyPositiveException- ifdimension <= 0orsize <= 0.NotPositiveException- ifdarkThreshold < 0.OutOfRangeException- ifmaxDarkFractiondoes 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 thebackgroundvalue will be returned instead.darkThreshold- Value of the illumination below which a facet is considered dark.background- Value returned when themaxDarkFractionthreshold 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 <= 0orsize <= 0.NotPositiveException- ifdarkThreshold < 0.OutOfRangeException- ifmaxDarkFractiondoes not belong to the interval[0, 1].
-
InterpolatingMicrosphere
Copy constructor.- Parameters:
other- Instance to copy.
-
-
Method Details
-
copy
-
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 givensamplePointsto 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 thepointand one of thesamplePointsis 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 ofndoes 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 thefacetsdata to zero.
-