ハフ変換のこの部分は私には難しいです。
なぜ 16 ビット (および 15 ビット) シフト操作なのか、「-sin」とはどういう意味なのか疑問に思いました。
元のコード: https://github.com/opencv/opencv/blob/master/modules/imgproc/src/hough.cpp
a = -ttab[max_n*2+1];
b = ttab[max_n*2];
x0 = j;
y0 = i;
if( fabs(a) > fabs(b) )
{
xflag = 1;
dx0 = a > 0 ? 1 : -1;
dy0 = cvRound( b*(1 << shift)/fabs(a) );
y0 = (y0 << shift) + (1 << (shift-1));
}
else
{
xflag = 0;
dy0 = b > 0 ? 1 : -1;
dx0 = cvRound( a*(1 << shift)/fabs(b) );
x0 = (x0 << shift) + (1 << (shift-1));
}