这段代码太好了,跟大家一起分享它。
//左上角到右下角画直线.
//
//caimouse 2007/02/11
//
bool CSurface::LeftTopToRightBottom(int nXStart,int nYStart,int nDeltaX,int nDeltaY)
{
//
int nDelta = CNOS_NS::Max(nDeltaX,nDeltaY);
//计算判断符号,除2.
int nError = nDelta>>1;
//
if (nDeltaX < nDeltaY)
{
for (int i = 0; i < nDelta; i++)
{
//画点.
SetPixel(nXStart,nYStart,m_crCurColor);
//向下移动一步。
nYStart++;
//dy/2 <= dx 判断选择那一点。
nError += nDeltaX;
if (nDeltaY <= nError)
{
//向左移动一步。
nXStart++;
nError -= nDeltaY;
}
}
}
else
{
for (int i = 0; i < nDelta; i++)
{
//画点.
SetPixel(nXStart,nYStart,m_crCurColor);
//
nXStart++;
nError += nDeltaY;
if (nDeltaX <= nError)
{
nYStart++;
nError -= nDeltaX;
}
}
}
return true;
}