X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=libctsim%2Fscanner.cpp;h=6e2e57ad48bf962af80a9219c9638947f21bc713;hp=120ddb515dc44080148cb054984befe2d0f543e0;hb=1f72f3289ee6be64ec607ea93b4fcfe8b5dff3eb;hpb=305ea081c3308c3d936c801dedddabdbc9b0c37d diff --git a/libctsim/scanner.cpp b/libctsim/scanner.cpp index 120ddb5..6e2e57a 100644 --- a/libctsim/scanner.cpp +++ b/libctsim/scanner.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: scanner.cpp,v 1.28 2001/02/02 00:46:38 kevin Exp $ +** $Id: scanner.cpp,v 1.29 2001/02/04 21:28:19 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -132,7 +132,7 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName, int nDet, m_initPos.yd2 = m_dYCenter - m_dFocalLength; m_initPos.angle = 0.0; } else if (m_idGeometry == GEOMETRY_EQUILINEAR) { - +#if 0 double dAngle1 = atan ((m_dFieldOfView / 2) / m_dFocalLength); double dHalfSquare = m_dFieldOfView / SQRT2 / 2; double dFocalPastPhm = m_dFocalLength - dHalfSquare; @@ -143,8 +143,14 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName, int nDet, } double dAngle2 = atan( dHalfSquare / dFocalPastPhm ); double dAngle = maxValue (dAngle1, dAngle2); -#if 0 - double dAngle = (m_dFieldOfView / 2) / cos (asin (m_dFieldOfView / 2 / m_dFocalLength)); + //double dAngle = (m_dFieldOfView / 2) / cos (asin (m_dFieldOfView / 2 / m_dFocalLength)); +#else + if (m_dFieldOfView/2 >= m_dFocalLength) { + m_fail = true; + m_failMessage = "Invalid geometry: Focal length must be larger than field of view"; + return; + } + double dAngle = asin ((m_dFieldOfView/2) / m_dFocalLength); #endif double dHalfDetLen = 2 * m_dFocalLength * tan (dAngle); @@ -165,17 +171,12 @@ Scanner::Scanner (const Phantom& phm, const char* const geometryName, int nDet, m_initPos.yd2 = m_dYCenter - m_dFocalLength; m_initPos.angle = 0.0; } else if (m_idGeometry == GEOMETRY_EQUIANGULAR) { - double dAngle1 = atan ((m_dFieldOfView / 2) / m_dFocalLength); - - double dHalfSquare = m_dFieldOfView / SQRT2 / 2; - double dFocalPastPhm = m_dFocalLength - dHalfSquare; - if (dFocalPastPhm <= 0.) { + if (m_dFieldOfView/2 > m_dFocalLength) { m_fail = true; - m_failMessage = "Focal Point inside of phantom"; + m_failMessage = "Invalid geometry: Focal length must be larger than field of view"; return; } - double dAngle2 = atan ( dHalfSquare / dFocalPastPhm ); - double dAngle = maxValue (dAngle1, dAngle2); + double dAngle = asin ((m_dFieldOfView/2) / m_dFocalLength); m_detLen = 2 * dAngle; m_detInc = m_detLen / m_nDet;