23 , mLightAzimuth( lightAzimuth )
24 , mLightAngle( lightAngle )
33 float* x12,
float* x22,
float* x32,
34 float* x13,
float* x23,
float* x33 )
36 float derX =
calcFirstDerX( x11, x21, x31, x12, x22, x32, x13, x23, x33 );
37 float derY =
calcFirstDerY( x11, x21, x31, x12, x22, x32, x13, x23, x33 );
44 float zenith_rad = mLightAngle *
M_PI / 180.0;
45 float slope_rad = atan( sqrt( derX * derX + derY * derY ) );
46 float azimuth_rad = mLightAzimuth *
M_PI / 180.0;
48 if ( derX == 0 && derY == 0 )
50 aspect_rad = azimuth_rad / 2.0;
54 aspect_rad =
M_PI + atan2( derX, derY );
56 return qMax( 0.0, 255.0 * (( cos( zenith_rad ) * cos( slope_rad ) ) + ( sin( zenith_rad ) * sin( slope_rad ) * cos( azimuth_rad - aspect_rad ) ) ) );
float calcFirstDerY(float *x11, float *x21, float *x31, float *x12, float *x22, float *x32, float *x13, float *x23, float *x33)
Calculates the first order derivative in y-direction according to Horn (1981)
float calcFirstDerX(float *x11, float *x21, float *x31, float *x12, float *x22, float *x32, float *x13, float *x23, float *x33)
Calculates the first order derivative in x-direction according to Horn (1981)
QgsHillshadeFilter(const QString &inputFile, const QString &outputFile, const QString &outputFormat, double lightAzimuth=300, double lightAngle=40)
Adds the ability to calculate derivatives in x- and y-directions.
float mOutputNodataValue
The nodata value of the output layer.
float processNineCellWindow(float *x11, float *x21, float *x31, float *x12, float *x22, float *x32, float *x13, float *x23, float *x33) override
Calculates output value from nine input values.