From: <hug...@li...> - 2013-01-12 10:13:30
|
branch: details: http://hugin.hg.sourceforge.net/hgweb/hugin/hugin/hgroot/hugin/hugin/rev/4df1fbdc2673 changeset: 6090:4df1fbdc2673 user: tmodes date: Sat Jan 12 10:41:55 2013 +0100 description: Modified calculation of hfov and focal length for orthographic projection to take also black border into account diffstat: src/hugin_base/panodata/SrcPanoImage.cpp | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diffs (29 lines): diff -r 0d28fddc514e -r 4df1fbdc2673 src/hugin_base/panodata/SrcPanoImage.cpp --- a/src/hugin_base/panodata/SrcPanoImage.cpp Sat Jan 12 10:36:58 2013 +0100 +++ b/src/hugin_base/panodata/SrcPanoImage.cpp Sat Jan 12 10:41:55 2013 +0100 @@ -799,7 +799,12 @@ hfov = (sensorSize.x / fl) / M_PI * 180; break; case SrcPanoImage::FISHEYE_ORTHOGRAPHIC: - hfov = 2 * asin(std::min<double>(1.0, (sensorSize.x/2.0)/fl)) * 180.0/M_PI; + { + double val=(sensorSize.x/2.0)/fl; + double n; + double frac=modf(val, &n); + hfov = 2 * asin(frac) * 180.0/M_PI + n * 180.0; + } break; case SrcPanoImage::FISHEYE_EQUISOLID: hfov = 4 * asin(std::min<double>(1.0, (sensorSize.x/4.0)/fl)) * 180.0/M_PI; @@ -846,7 +851,10 @@ return (sensorSize.x / (hfov/180*M_PI)); break; case SrcPanoImage::FISHEYE_ORTHOGRAPHIC: - return (sensorSize.x /2.0) / sin(hfov/180.0*M_PI/2.0); + { + int t=(int)ceil((hfov-180)/360); + return (sensorSize.x /2.0) / (2 * t + pow ( -1.0, t) * sin(hfov/180.0*M_PI/2.0)); + }; case SrcPanoImage::FISHEYE_STEREOGRAPHIC: return (sensorSize.x/4.0) / tan(hfov/180.0*M_PI/4.0); case SrcPanoImage::FISHEYE_EQUISOLID: |