** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: projections.cpp,v 1.52 2001/03/02 05:10:22 kevin Exp $
+** $Id: projections.cpp,v 1.54 2001/03/05 21:59:55 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
for (unsigned int ix = 0; ix < ny; ix++) {
for (unsigned int iy = 0; iy < ny; iy++) {
if (iInterpolationID == POLAR_INTERP_NEAREST) {
- int iView = nearest<int> (ppdView[ix][iy]);
- int iDet = nearest<int> (ppdDet[ix][iy]);
+ unsigned int iView = nearest<int> (ppdView[ix][iy]);
+ unsigned int iDet = nearest<int> (ppdDet[ix][iy]);
if (iView == nView) {
iView = 0;
// iDet = m_nDet - iDet;
v[ix][iy] = 0;
}
} else if (iInterpolationID == POLAR_INTERP_BILINEAR) {
- int iFloorView = static_cast<int>(ppdView[ix][iy]);
+ unsigned int iFloorView = static_cast<int>(ppdView[ix][iy]);
double dFracView = ppdView[ix][iy] - iFloorView;
- int iFloorDet = static_cast<int>(ppdDet[ix][iy]);
+ unsigned int iFloorDet = static_cast<int>(ppdDet[ix][iy]);
double dFracDet = ppdDet[ix][iy] - iFloorDet;
if (iFloorDet >= 0 && iFloorView >= 0) {
m_detInc = convertDegreesToRadians (3.06976 / 60);
m_detStart = -m_dFanBeamAngle / 2;
m_rotInc = TWOPI / static_cast<double>(iNViews);
- m_rotStart = 0;
+ m_rotStart = HALFPI;
m_dViewDiameter = sin (m_dFanBeamAngle / 2) * m_dFocalLength * 2;
if (iNDets != 1024)
long lDataPos = 0;
for (int iv = 0; iv < iNViews; iv++) {
- long* pLong = reinterpret_cast<long*>(pData + lDataPos+0);
+ unsigned char* pArgBase = pData + lDataPos;
+ unsigned char* p = pArgBase+0;
#ifndef WORDS_BIGENDIAN
- SwapBytes4 (pLong);
+ SwapBytes4 (p);
#endif
- long lProjNumber = *pLong;
+ long lProjNumber = *reinterpret_cast<long*>(p);
- pLong = reinterpret_cast<long*>(pData + lDataPos+20);
+ p = pArgBase+20;
#ifndef WORDS_BIGENDIAN
- SwapBytes4 (pLong);
+ SwapBytes4 (p);
#endif
- long lEscale = *pLong;
+ long lEscale = *reinterpret_cast<long*>(p);
- pLong = reinterpret_cast<long*>(pData + lDataPos+28);
+ p = pArgBase+28;
#ifndef WORDS_BIGENDIAN
- SwapBytes4 (pLong);
+ SwapBytes4 (p);
#endif
- long lTime = *pLong;
+ long lTime = *reinterpret_cast<long*>(p);
- float* pFloat = reinterpret_cast<float*>(pData + lDataPos+4);
+ p = pArgBase + 4;
#ifndef WORDS_BIGENDIAN
- SwapBytes4 (pFloat);
+ SwapBytes4 (p);
#endif
- double dAlpha = *pFloat;
+ double dAlpha = *reinterpret_cast<float*>(p) + HALFPI;
- pFloat = reinterpret_cast<float*>(pData + lDataPos+12);
+ p = pArgBase+12;
#ifndef WORDS_BIGENDIAN
- SwapBytes4 (pFloat);
+ SwapBytes4 (p);
#endif
- double dAlign = *pFloat;
+ double dAlign = *reinterpret_cast<float*>(p);
- pFloat = reinterpret_cast<float*>(pData + lDataPos+16);
+ p = pArgBase + 16;
#ifndef WORDS_BIGENDIAN
- SwapBytes4 (pFloat);
+ SwapBytes4 (p);
#endif
- double dMaxValue = *pFloat;
+ double dMaxValue = *reinterpret_cast<float*>(p);
lDataPos += 32;
double dEScale = pow (2.0, -lEscale);