18 #ifndef __itkBresenhamLine_txx
19 #define __itkBresenhamLine_txx
25 template<
unsigned int VDimension>
32 unsigned int m_MainDirection;
54 IndexType m_CurrentImageIndex, StartIndex, LastIndex;
57 m_CurrentImageIndex.
Fill(0);
59 for (
unsigned i = 0; i<VDimension;i++)
65 unsigned int maxDistanceDimension = 0;
66 for (
unsigned i = 0; i<VDimension;i++)
69 if (distance > maxDistance)
71 maxDistance = distance;
72 maxDistanceDimension = i;
74 m_IncrementError[i] = 2*distance;
75 m_OverflowIncrement[i] = (LastIndex[i] < 0 ? -1 : 1);
77 m_MainDirection = maxDistanceDimension;
78 m_MaximalError.
Fill(maxDistance);
79 m_ReduceErrorAfterIncrement.
Fill(2*maxDistance);
80 m_AccumulateError.
Fill(0);
81 unsigned int steps = 1;
82 result[0] = m_CurrentImageIndex - StartIndex;
83 while (steps < length)
87 for (
unsigned int i = 0; i < VDimension; ++i)
89 if (i == m_MainDirection)
92 m_CurrentImageIndex[i] += m_OverflowIncrement[i];
96 m_AccumulateError[i] += m_IncrementError[i];
97 if (m_AccumulateError[i] >= m_MaximalError[i])
99 m_CurrentImageIndex[i] += m_OverflowIncrement[i];
100 m_AccumulateError[i] -= m_ReduceErrorAfterIncrement[i];
105 result[steps] = m_CurrentImageIndex - StartIndex;