Abstract class Phase_Function


The abstract class Phase_Function is used by to store information about the angular distribution of scattering in bulk material, needed for example, by First_Diffuse_BRDF_Model. Five specific classes inheriting its properties are provided. The user may provide other phase functions by creating classes inheriting the properties of Phase_Function. The provided Phase_Functions are:

Instantiable Models and Their Parameters:

Parameter Data Type Description Default
Henyey_Greenstein_Phase_Function:
The Henyey-Greenstein phase function is parameterized by g, which is the average of the cosine of the scattering angle. The parameter g must be between -1 and 1. For g=0, the scattering is isotropic. For g positive, the scattering is peaked in the forward scattering direction. For g negative, the scattering is peaked in the backward scattering direction.
g double The asymmetry parameter given by the average of the cosine of the scattering angle. 0.01
Double_Henyey_Greenstein_Phase_Function:
The double Henyey-Greenstein phase function is the sum of two Henyey-Greenstein phase functions, one being forward scattering, and the other being backward scattering. It is parameterized by two parameters, g, which is the average of the cosine of the scattering angle, and c, which indicates the amount of forward or backward scattering. For c=1, the function simplifies to the single Henyey-Greenstein phase function, while for c=-1, the function simplifies to the single Henyey-Greenstein phase function in the backscattering direction.
g double The asymmetry parameter given by the average of the cosine of the scattering angle. 0.01
c double A parameter which indicates the amount of forward or backward scattering. For c=1, the function simplifies to the single Henyey-Greenstein phase function, while for c=-1, the function simplifies to the single Henyey-Greenstein phase function in the backscattering direction. 0.1
Isotropic_Phase_Function:
The isotropic phase function corresponds to scattering which is isotropic. It has no parameters.
Isotropic_Phase_Function has no adjustable parameters.
Rayleigh_Phase_Function:
The Rayleigh phase function corresponds to scattering which follows that expected for unpolarized Rayleigh scattering. It has no parameters.
Rayleigh_Phase_Function has no adjustable parameters.
Legendre_Phase_Function:
The Legendre phase function is parameterized by a sum of up to six Legendre polynomials (orders l=0 to l=5).
c0 double The 0-coefficient of the Legendre polynomial expansion. 1
c1 double The 1-coefficient of the Legendre polynomial expansion. 0.65
c2 double The 2-coefficient of the Legendre polynomial expansion. 0.42
c3 double The 3-coefficient of the Legendre polynomial expansion. 0
c4 double The 4-coefficient of the Legendre polynomial expansion. 0
c5 double The 5-coefficient of the Legendre polynomial expansion. 0
Table_Phase_Function:
The class Table_Phase_Function allows the user to provide a interpolation table of values for the phase function. The ordinate is the angle in degrees, while the absissa is the phase function, which is assumed to be properly normalized. The parameter table is the table of values (see Table).
table Table A look-up table of phase function versus angle in degrees. 1

See also:

SCATMECH Home,   First_Diffuse_BRDF_Model  

H.C. van de Hulst, Multiple Light Scattering: Tables, Formulas, and Applications, (Academic Press, New York, 1980), Volume 2, Chap. 10.
L.C. Henyey and J.L. Greenstein, "Diffuse radiation in the galaxy," Astrophys. J. 93, 70-83 (1941).

Include file:

#include "firstdiffuse.h"

Source code:

firstdiffuse.cpp

Definition of public elements:

class Phase_Function : public Model {
public:
    Phase_Function(int ask=0);
    virtual double f(double theta)=0;
    virtual Model* clone() const =0;
    static Inheritance inheritance;
    virtual void set_parameter(const std::string& name,const std::string& value);
};

typedef Model_Ptr<Phase_Function> Phase_Function_Ptr;

double f(double theta)

This function evaluates the phase function for angle theta. The angle theta is measured in radians from the forward scattering direction. It should be normalized so that the integral over the hemisphere is one.

Top of Page

typedef Model_Ptr<Phase_Function> Phase_Function_Ptr

The typedef Phase_Function_Ptr behaves like a pointer to an instance of class Phase_Function. The following statement will query the user for an instance of class Phase_Function:

Phase_Function_Ptr model = Get_Model_Ptr();

The next statement will also create an instance of class Phase_Function:

Phase_Function_Ptr model = "Henyey_Greenstein_Phase_Function";

See Model_Ptr<model>.

Top of Page


For More Information

SCATMECH Technical Information and Questions
Sensor Science Division Home Page
Sensor Science Division Inquiries
Website Comments

Current SCATMECH version: 7.22 (April 2021)