Core 1.0
SimplexTurbulence Class Reference

Fractal Brownian motion from a simplex noise function. More...

#include <turbulence.h>

Inheritance diagram for SimplexTurbulence:
SimplexNoise AnalyticScalarField

Public Member Functions

 SimplexTurbulence (const double &, const double &, const double &, const double &=0.5, const double &=0.5, int=8, const Vector &=Vector::Null)
 Create a scaled turbulence.
 
 SimplexTurbulence ()
 Unit turbulence.
 
 ~SimplexTurbulence ()
 Empty.
 
double Value (const Vector &) const
 Computes the turbulence value at a given point.
 
double GetAlpha () const
 Return the amplitude dampening coefficient.
 
double GetLambda () const
 Return the wavelength dampening coefficient.
 
double GetOctaves () const
 Number of octaves.
 
double K () const
 Return the global Lipschitz constant.
 
double Maximum () const
 Return the maximum of the turbulence.
 

Protected Member Functions

double UnitAt (const Vector &) const
 Computes the turbulence value at a given point.
 
- Protected Member Functions inherited from SimplexNoise
 SimplexNoise ()
 Empty.
 
 ~SimplexNoise ()
 Empty.
 
- Protected Member Functions inherited from AnalyticScalarField
bool Find (Vector &, bool, const Box &, int=10000, Random &=Random::R239) const
 Find a random sample point inside or outside the surface.
 
 AnalyticScalarField (bool=true)
 Constructor.
 
virtual Vector Gradient (const Vector &) const
 Compute the gradient of the field.
 
Matrix Hessian (const Vector &) const
 Compute the Hessian symmetric matrix of the field function.
 
virtual Vector Normal (const Vector &) const
 Compute the normal to the surface.
 
bool Inside (const double &) const
 Check if the value is considered as inside or outside.
 
virtual Color GetMaterial (const Vector &, const Vector &=Vector::Null) const
 Compute the color.
 
virtual Box GetBox () const
 Compute the bounding box of the scalar field.
 
void Curvature (const Vector &, double &, double &) const
 Compute the gaussian and mean curvatures.
 
Vector Cast (const Vector &, const double &, const double &=1e-6, int n=100) const
 Given a starting vertex x, project it onto the implicit surface following the gradient.
 
Vector Dichotomy (Vector, Vector, double, double, double, const double &=1.0e-4) const
 Compute the intersection between a segment and an implicit surface.
 
virtual bool GetSample (Vector &, const Box &, Random &=Random::R239) const
 Find a point sample on the implicit surface.
 
virtual int GetSamples (QVector< Vector > &, const Box &, int, Random &=Random::R239) const
 Find a set of random sample points on the implicit surface.
 
virtual QVector< VectorPoisson (double, int, Random &=Random::R239) const
 Compute a Poisson sphere distribution on an implicit surface.
 
virtual ScalarField2 Sample (const Rectangles &, int, int) const
 Compute the field function at the vertices a lattice.
 
virtual ScalarField2 Sample (const Quadrangle &, int) const
 Sample the scalar field on a quadrangle.
 
virtual ScalarField Sample (const Box &, int) const
 Sample the implicit surface to get a scalar field.
 
int Roots (const Ray &, const double &, const double &, const double &, double *, int=1, const double &=1.0e-4) const
 Find the intersections between a ray and an implicit surface on a given interval.
 
int Roots (const Ray &, const double &, const double &, const double &, const double &, const double &, double *, int=1, const double &=1.0e-4) const
 This functions searches the intersections between a ray and an implicit surface on a given interval.
 
virtual double K (const Box &) const
 Compute the local Lipschitz constant inside a box.
 
virtual double K (const Sphere &) const
 Compute the local Lipschitz constant inside a box.
 
virtual double K (const Segment &) const
 Compute the local Lipschitz constant along a segment.
 
virtual void Polygonize (int, Mesh &, const Box &, const double &=1e-4) const
 Compute the polygonal mesh approximating the implicit surface.
 
virtual void PolygonizeLucie (const Box &, Mesh &, bool, bool) const
 Implementation of the original continuation polygonization method.
 
virtual void PolygonizeLucie (const double &, Mesh &, bool, bool) const
 Wyvill's original marching cubes algorithm.
 
virtual void Dual (int, Mesh &, const Box &) const
 Dual polygonization.
 
virtual bool SphereTrace (const Ray &, const double &, const double &, const double &, double &, int &, const double &=1e-4) const
 Find the first intersection between a ray and an implicit surface on a given interval, using sphere tracing.
 
virtual void Polygonize (const Box &, QVector< Triangle > &, const double &=1e-4, bool=false) const
 Polygonize a cube.
 
virtual void Polygonize (const Tetrahedra &, QVector< Triangle > &, const double &=1e-4) const
 Polygonize a tetrahedral cell.
 
virtual Mesh PolygonizeOctree (const Box &, int, const double &=1e-4) const
 Compute the polygonal mesh approximating the implicit surface using an octree decomposition of space.
 
virtual void Voxelize (const Box &, int, Box &, QVector< Vector > &) const
 Voxelize the scalar field.
 
virtual void Voxelize (int, Voxel &, const Box &) const
 Voxelization.
 
virtual double Volume (int=5) const
 Computes the volume of the BlobTree.
 
virtual double Volume (const Box &, int) const
 Compute the volume of a BlobTree object.
 
virtual double Volume (const Box &, int, double &) const
 Compute the volume of an implicit surface.
 
virtual double StochasticVolume (const Box &, int) const
 Compute the volume of an implicit surface.
 
virtual Sphere Center (int) const
 Computes the gravity center of the BlobTree.
 
virtual Sphere Center (const Box &, int) const
 Compute the center of gravity of the BlobTree.
 
virtual void Colorize (const Mesh &, MeshColor &) const
 Colorize the vertexes of a mesh according to the analytic scalar field.
 

Protected Attributes

double alpha = 0.5
 Amplitude attenuation coefficient.
 
double lambda = 0.5
 Wavelength amplification coefficient.
 
int octaves = 8
 Number of octaves.
 
Vector t = Vector::Null
 Translation.
 
double v0 = 0.0
 Base value.
 
double a0 = 1.0
 Base amplitude.
 
double l0 = 1.0
 Wavelength.
 
- Protected Attributes inherited from AnalyticScalarField
bool sign = true
 Sign convention, used for normal computation.
 

Static Protected Attributes

static const Matrix R3 = Matrix::Rotation(Vector(4.0 * Math::Pi / 19.0, 3.0 * Math::Pi / 19.0, 2.0 * Math::Pi / 19.0))
 Random incremental rotation.
 
- Static Protected Attributes inherited from SimplexNoise
static const Vector gradient [12]
 Array of gradients for 3D noise.
 
static const int perm [512]
 Permutation table, 256 entries duplicated once to avoid modulo computations.
 
static const double G3 = 1.0 / 6.0
 Unskew factors for 3D case.
 
- Static Protected Attributes inherited from AnalyticScalarField
static int ncubes = 0
 Number of cubes processed by polygonization algorithms.
 
static const double Epsilon = 1e-6
 Epsilon value for partial derivatives.
 

Friends

std::ostream & operator<< (std::ostream &s, const SimplexTurbulence &noise)
 Overloaded.
 

Detailed Description

Fractal Brownian motion from a simplex noise function.

A turbulence field is characterized by the number of octaves, the attenuation of the amplitude of the noise summed at every step, and by the amplification of the wavelength.

Constructor & Destructor Documentation

◆ SimplexTurbulence()

SimplexTurbulence::SimplexTurbulence ( const double & v,
const double & a,
const double & l,
const double & alpha = 0.5,
const double & lambda = 0.5,
int octaves = 8,
const Vector & t = Vector::Null )
explicit

Create a scaled turbulence.

Parameters
v,a,lBase value, amplitude and wavelength.
alphaAmplitude attenuation factor (~0.5, should be less than 1.0).
lambdaWavelength attenuation factor (~0.5, should be less than 1.0).
octavesNumber of octaves.
tTranslation offset.

Member Function Documentation

◆ K()

double SimplexTurbulence::K ( ) const
virtual

Return the global Lipschitz constant.

See also
Noise::K()

Reimplemented from SimplexNoise.

◆ UnitAt()

double SimplexTurbulence::UnitAt ( const Vector & p) const
protected

Computes the turbulence value at a given point.

Sums a series of scaled noise functions.

Parameters
pPoint.

◆ Value()

double SimplexTurbulence::Value ( const Vector & p) const
virtual

Computes the turbulence value at a given point.

Sums a series of scaled simplex noise functions.

Parameters
pPoint.

Reimplemented from SimplexNoise.

Friends And Related Symbol Documentation

◆ operator<<

std::ostream & operator<< ( std::ostream & s,
const SimplexTurbulence & noise )
friend

Overloaded.

Parameters
sStream.
noiseThe noise.