//
By rappizit@yahoo.com.cn
// 2007-10-15 第 2 版
#define ABS(a) (a >= 0 ? a : -a)
#define SWAP(a, b) {int t = a; a = b; b = t;}
// 改进的 Bresenham 画线算法程序
// 最后一个形参是画图函数 drawpixel (int x, int y, int color) 的指针,在不同运行环境下调用不同的画图函数
void IntBresenhamline ( int x0, int y0, int x1, int y1, int color, void ( * drawpixel)( int , int , int ))
{
int dx = x1 - x0, dy = y1 - y0;
if (ABS(dx) >= ABS(dy))
{
if (x0 > x1)
{
SWAP(x0, x1);
SWAP(y0, y1);
dx = - dx;
dy = - dy;
}
if (dy >= 0 )
{
// 直线的倾斜角位于 [0, pi / 4]
for ( int x = x0, y = y0, e = - dx; x <= x1; x ++ )
// 2007-10-15 第 2 版
#define ABS(a) (a >= 0 ? a : -a)
#define SWAP(a, b) {int t = a; a = b; b = t;}
// 改进的 Bresenham 画线算法程序
// 最后一个形参是画图函数 drawpixel (int x, int y, int color) 的指针,在不同运行环境下调用不同的画图函数
void IntBresenhamline ( int x0, int y0, int x1, int y1, int color, void ( * drawpixel)( int , int , int ))
{
int dx = x1 - x0, dy = y1 - y0;
if (ABS(dx) >= ABS(dy))
{
if (x0 > x1)
{
SWAP(x0, x1);
SWAP(y0, y1);
dx = - dx;
dy = - dy;
}
if (dy >= 0 )
{
// 直线的倾斜角位于 [0, pi / 4]
for ( int x = x0, y = y0, e = - dx; x <= x1; x ++ )

这是一个改进的 Bresenham 画线算法程序,适用于不同倾斜角度的直线绘制。代码中包含了针对不同倾斜范围的优化处理,并提供了一个通用的画图函数接口drawpixel,以适应不同环境下的画图需求。在主函数中,通过调用 IntBresenhamline 进行直线绘制,并在 CGraphicsView::OnDraw 中使用 CDC 对象进行设备上下文操作,实现了在窗口上的图形绘制。
最低0.47元/天 解锁文章
2097





