| 
         SCATMECH > Classes and Functions >
        Surface Scattering Models
        > Local_BRDF_Model 
	
        
         
        The abstract class Local_BRDF_Model handles the
        generic operations associated with any scattering model
        which is associated with a localized defect for which a
        differential scattering cross-section (DSC) is a more
        natural description of the scattering function. It adds to
        the class BRDF_Model a
        conversion from DSC to BRDF using a specified defect
        density or inverse spot size. All classes which inherit
        Local_BRDF_Model must define either jonesDSC or muellerDSC. The class also provides the
        public functions JonesDSC and
        MuellerDSC, defined in a similar
        fashion as the similarly named functions in BRDF_Model.
         The convention of Local_BRDF_Model is that the
        function jonesDSC returns a
        scattering matrix of type JonesMatrix, which, when converted to
        a MuellerMatrix by
        typecasting, becomes the differential scattering
        cross-section (DSC). This function differs from that
        defined for SphericalScatterer
        by a factor of 1/k. 
	Parameters:
        
          
            | Parameter | 
            Data
            Type | 
            Description | 
            Default | 
           
          
            | lambda | 
            double | 
            Wavelength of the light
            in vacuum [µm]. 
            (Inherited from BRDF_Model.) | 
            0.532 | 
           
          
            | type | 
            int | 
            
	      Indicates whether the light is incident from above the
            substrate or from within the substrate and whether the
            scattering is evaluated in reflection or transmission.
            The choices are: 
	      0 : Light is incident from the above the substrate, and scattering is evaluated in reflection. 
	      1 : Light is incident from the above the substrate, and scattering is evaluated in transmission. 
	      2 : Light is incident from the within the substrate, and scattering is evaluated in reflection. 
	      3 : Light is incident from the within the substrate, and scattering is evaluated in transmission. 
	      For 1, 2, and 3, the substrate must be non-absorbing. 
	      Not every model inheriting Local_BRDF_Model supports all modes. 
            (Inherited from BRDF_Model). | 
            0 | 
           
          
            | substrate | 
            dielectric_function | 
            The
            optical constants of the substrate, expressed as a
            complex number (n,k) or, optionally, as a function of
            wavelength. 
            (Inherited from BRDF_Model.) | 
            (4.05,0.05) | 
           
          
            | density | 
            double | 
            The
            surface number density of local scatterers
            [µm-2]. | 
            1 | 
           
         
        See also:
        SCATMECH Home,   Conventions,   SphericalScatterer
          
	Include file:
          
#include "local.h"
 
        Source code:
          
local.cpp
reg_local.cpp
 
        Definition of public and protected elements:
          
class BRDF_Model {
    public:
        JonesMatrix JonesDSC(double thetai,
                          double thetas,
                          double phis,
                          Coordinate_System cs = psps);
        MuellerMatrix MuellerDSC(double thetai,
                              double thetas,
                              double phis,
                              Coordinate_System cs = psps);
        JonesMatrix JonesDSC(Vector& source,
                          Vector& viewer,
                          Vector& normal,
                          Coordinate_System cs = plane);
        MuellerMatrix MuellerDSC(Vector& source,
                              Vector& viewer,
                              Vector& normal,
                              Coordinate_System cs = plane);
protected:
        virtual JonesMatrix jonesDSC(double thetai,
                                  double thetas,
                                  double phis);
        virtual MuellerMatrix muellerDSC(double thetai,
                                      double thetas,
                                      double phis);
};
typedef Model_Ptr<Local_BRDF_Model> Local_BRDF_Model_Ptr;
         
        
        
          These functions
          behave like their three-argument versions, but allow for
          evaluation of models using different polarization
          coordinate systems. They cannot be overloaded by
          inherited classes. The value of cs defines the
          coordinate system for which the scattering matrix will be
          returned.
         Example:
          
double ti,ts,ps;
JonesVector incidentlight;
BRDF_Model *model;
JonesVector jones = model->Jones(ti,ts,ps,BRDF_Model::plane)*incidentlight;
 
         
        Top of Page 
	
        
          These function behave like the functions jones and mueller,
          except that rather than specifying scattering angles,
          directions to the source and viewer and the surface
          normal are specified. source is a Vector pointing from the sample to the
          light source. viewer is a Vector pointing in the scattering
          direction. normal is a Vector pointing in the outward surface
          normal. Neither source, viewer, or
          normal need be normalized.
           Note that the coordinate system defaults to
          BRDF_Model::plane, which is most natural for
          rendering applications. 
         
        Top of Page 
	
        
          This function returns the Jones scattering matrix. Its
          parameters are the incident angle thetai, the
          scattering polar angle thetas, and the scattering
          azimuthal angle phis. If this function is not
          defined for an inherited class, it defaults to a MuellerMatrix to JonesMatrix conversion. One of the
          functions, mueller or jones, must be
          defined by any inherited class.
         Example:
          
double ti,ts,ps;
JonesVector incidentlight;
Some_BRDF_Model model; // Assume that Some_BRDF_Model is a BRDF_Model...
JonesVector jones = model.jones(ti,ts,ps)*incidentlight;
 
         
        Top of Page 
	
        
          This function returns the Mueller scattering matrix. Its
          parameters are the incident angle thetai, the
          scattering polar angle thetas, and the scattering
          azimuthal angle phis. If this function is not
          defined for an inherited class, it defaults to a JonesMatrix to MuellerMatrix conversion. One of
          the functions, mueller or jones, must be
          defined by any inherited class.
           The convention of the Local_BRDF_Model class is
          that the 00 term of the Mueller matrix is the
          differential scattering cross section (DSC). 
         
        Top of Page 
	
        
          The typedef Local_BRDF_Model_Ptr behaves like a
          pointer to an instance of class Local_BRDF_Model.
          The following statement will query the user for an
          instance of class Local_BRDF_Model:
           
Local_BRDF_Model_Ptr model = Get_Model_Ptr();
 
          The next
          statement will also create an instance of class
          Local_BRDF_Model:
           
Local_BRDF_Model_Ptr model = "Bobbert_Vlieger_BRDF_Model";
 
          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) 
 
  |