代码改变世界

改进的有效边表算法,多边形的扫描转换

2010-12-04 21:51 by 风恋残雪, 3537 阅读, 1 推荐, 收藏, 编辑
摘要:这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。边表构造的算法:(1) 首先构造一个纵向链表,链表的长度为多边形所占有的最大扫描线数,链表的每个结点,称为一个桶,则对应多边形覆盖的每一条扫描线。(2) 将每条边的信息链入与该边最小y坐标相对的桶处。也就是说,若某条边的较低点为ymin,则该边就放在相应的扫描线中。(3) 每条边的数据形成一个结点,内容包括:该扫描线与该的初始交点x(即较低端点的x值),1/k,以及该边的最大y值ymax如下:x|ymin  ymax  1/k  next(4) 同一桶中若干条边按x| 阅读全文

Bresenham画椭圆算法

2010-12-04 21:17 by 风恋残雪, 3394 阅读, 0 推荐, 收藏, 编辑
摘要:这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。算法步骤:(1) 输入椭圆的长半轴a和短半轴b。(2) 计算初始值d = b*b + a * a * (-b + 0.25), x = 0, y = b。(3) 绘制点 (x, y)及其在四分象限上的另外3个对称点。(4) 判断d的符号。若d = 0,则先将d更新为d + b * b * (2 * x + 3),再将 (x, y)更新为(x+1, y);否则先将d更新为d + b * b * (2 * x + 3) + a * a (-2 * y + 2),再将(x 阅读全文

中点Bresenham画圆

2010-12-04 20:53 by 风恋残雪, 794 阅读, 0 推荐, 收藏, 编辑
摘要:这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。算法步骤:(1) 输入圆的半径R。(2) 计算初始值d = 1 - R, x = 0; y = R。(3) 绘制点(x, y), 及其在八分圆中的另外7个对称点。(4) 判断d的符号,若d 0, 则先将d更新为d+2*x+3,再将(x,y)更新为(x+1, y),否则将d更新为d+2*(x - y) + 5,再将(x, y)更新为(x+1, y-1)。(5) 当x = y时,重复步骤(3)和(4),否则结束。下面是画圆算法: 阅读全文

改进的Bresenham算法

2010-12-04 20:29 by 风恋残雪, 1158 阅读, 0 推荐, 收藏, 编辑
摘要:这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。算法步骤:(1) 输入直线的两端点P0 (x0, y0)和P1 (x1, y1)。(2) 计算初始值dx, dy, e = -dx, x = x0, y = y0。(3) 绘制点 (x, y)。(4) e更新为e+2 * dy。判断e的符号,若e 0, 则(x, y)更新为(x+1, y+1), 同时将e更新为e-2*dx;否则(x, y)更新为(x+1, y)。(5) 当直线没有画完时,重复步骤(3)和(4)否则结束。水平、垂直和|k| = 1的直线可以直接装入 阅读全文

中点Bresenham 算法及实现

2010-12-04 20:08 by 风恋残雪, 1293 阅读, 0 推荐, 收藏, 编辑
摘要:这里不仔细讲原理,只是把我写的算法发出来,跟大家分享下,如果有错误的话,还请大家告诉我,如果写的不好,也请指出来,一起讨论进步。 只写出0<=k<=1时的Bresenham算法绘图过程 (1) 输入直线的两端点,P0(x0, y0)和P1(x1, y1). (2) 计算初始值dx, dy, d = 阅读全文

Opengl 编程指南 第八章 leeds.bin 图片不能显示的问题

2010-11-29 22:07 by 风恋残雪, 437 阅读, 0 推荐, 收藏, 编辑
摘要:在看opengl编程指南时,试着写了下例子,colortable.c,结果窗口中并未显示任何图像。调试了下程序,发现读入的图像的长度和宽度不正确,可能作者是在支持大端模式的机器上做的,所以就杯具了,pc上的cpu(intel 和amd)一般是小端模式。所以读入的长度和宽度自然不对,导致计算的长度为0,所以就不能正确显示图像。[代码]解决办法是用16进制编辑器打开leeds.bin将前把字节中的数据改为小端模式,即低们在前,高位在后。这样就可以正常显示了。如上面代码所示。 阅读全文

初学CEGUI遇到的一些问题(在注册消息事件时)

2010-09-11 23:09 by 风恋残雪, 486 阅读, 0 推荐, 收藏, 编辑
摘要:在用subscribeEvent注册事件时,(1)若出现如下错误:error C2661: 'CEGUI::SubscriberSlot::SubscriberSlot' :no overloaded function takes 2 arguments说明你的回调函数函数写的有问题,要按标准来写。如[代码]//(2) 若出现如下错误Unhandled exception at 0x00fe30de in TankMapEditor.exe: 0xC0000005://Access violation reading location 0x00000041.则有可能是你引用的库不对,比如你是d 阅读全文

PKU 1024 Web Navigation 解法及教训总结

2010-08-28 19:19 by 风恋残雪, 325 阅读, 0 推荐, 收藏, 编辑
摘要:此道题就是考查基本数据结构堆栈的操作,之所以要在此写一下 ,是要总结一下做题的教训。以提醒自己少犯类似的错误。之所以这个简单的问题耗费了我一上午的时间,居然是因为我没有认真读题,只能说有点杯具了。:-(代码 阅读全文