void CParallelVecProjectionGeometry3D::projectPoint(double fX, double fY, double fZ, int iAngleIndex, double &fU, double &fV) const { ASTRA_ASSERT(iAngleIndex >= 0); ASTRA_ASSERT(iAngleIndex < m_iProjectionAngleCount); double f*X, fUY, fUZ, fUC; double fVX, fVY, fVZ, fVC; computeBP_UV_Coeffs(m_pProjectionAngles[iAngleIndex], f*X, fUY, fUZ, fUC, fVX, fVY, fVZ, fVC); // The -0.5f shifts from corner to center of detector pixels fU = (f*X*fX + fUY*fY + fUZ*fZ + fUC) - 0.5f; fV = (fVX*fX + fVY*fY + fVZ*fZ + fVC) - 0.5f; }
void CConeVecProjectionGeometry3D::projectPoint(float32 fX, float32 fY, float32 fZ, int iAngleIndex, float32 &fU, float32 &fV) const { ASTRA_ASSERT(iAngleIndex >= 0); ASTRA_ASSERT(iAngleIndex < m_iProjectionAngleCount); double f*X, fUY, fUZ, fUC; double fVX, fVY, fVZ, fVC; double fDX, fDY, fDZ, fDC; computeBP_UV_Coeffs(m_pProjectionAngles[iAngleIndex], f*X, fUY, fUZ, fUC, fVX, fVY, fVZ, fVC, fDX, fDY, fDZ, fDC); // The -0.5f shifts from corner to center of detector pixels double fD = fDX*fX + fDY*fY + fDZ*fZ + fDC; fU = (f*X*fX + fUY*fY + fUZ*fZ + fUC) / fD - 0.5f; fV = (fVX*fX + fVY*fY + fVZ*fZ + fVC) / fD - 0.5f; }