Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgstotalcurvaturefilter.h - description 3 : : ------------------- 4 : : begin : August 21th, 2009 5 : : copyright : (C) 2009 by Marco Hugentobler 6 : : email : marco dot hugentobler at karto dot baug dot ethz dot ch 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #include "qgstotalcurvaturefilter.h" 19 : : 20 : 0 : QgsTotalCurvatureFilter::QgsTotalCurvatureFilter( const QString &inputFile, const QString &outputFile, const QString &outputFormat ) 21 : 0 : : QgsNineCellFilter( inputFile, outputFile, outputFormat ) 22 : 0 : { 23 : : 24 : 0 : } 25 : : 26 : 0 : float QgsTotalCurvatureFilter::processNineCellWindow( float *x11, float *x21, float *x31, float *x12, 27 : : float *x22, float *x32, float *x13, float *x23, float *x33 ) 28 : : { 29 : : //return nodata if one value is the nodata value 30 : 0 : if ( *x11 == mInputNodataValue || *x21 == mInputNodataValue || *x31 == mInputNodataValue || *x12 == mInputNodataValue 31 : 0 : || *x22 == mInputNodataValue || *x32 == mInputNodataValue || *x13 == mInputNodataValue || *x23 == mInputNodataValue 32 : 0 : || *x33 == mInputNodataValue ) 33 : : { 34 : 0 : return mOutputNodataValue; 35 : : } 36 : : 37 : 0 : double cellSizeAvg = ( mCellSizeX + mCellSizeY ) / 2.0; 38 : 0 : double dxx = ( *x32 - 2 * *x22 + *x12 ) / ( mCellSizeX * mCellSizeX ); 39 : 0 : double dxy = ( -*x11 + *x31 + *x13 - *x33 ) / ( 4 * cellSizeAvg * cellSizeAvg ); 40 : 0 : double dyy = ( *x21 - 2 * *x22 + *x23 ) / ( mCellSizeY * mCellSizeY ); 41 : : 42 : 0 : return dxx * dxx + 2 * dxy * dxy + dyy * dyy; 43 : 0 : }