Listing 2: An accumulation function for line search.
bool LineHoughAccum::DoAddPoint(int x, int y)
{
int a;
int distCenter = m_rowLength/2;
// calculate rho for angle 0
int lastDist = distCenter + ((m_cosTable[0]*x + m_sinTable[0]*y) >> 10);
// loop through angles 1 through 180
for (a=1; a<m_cosTable.size(); a++)
{
int dist = distCenter + ((m_cosTable[a]*x + m_sinTable[a]*y) >> 10);
if (dist >= 0 && dist<m_rowLength)
{
// accumulate cells filling in multiple values for one angle
int stepDir = dist>lastDist ? 1 : -1;
for (int cell=lastDist; cell!=dist; cell+=stepDir)
m_accum[a*m_rowLength + cell] += 1;
}
lastDist = dist;
}
m_numAccumulated += 1;
return true;
}