- 466
- 0
- 约2.69万字
- 约 101页
- 2018-05-06 发布于浙江
- 举报
习题解答
第2章
2.如果线段端点坐标值不是整数,采用DDA算法产生的直线和将端点坐标值先取整再用Bresenham算法产生的直线是否完全相同?为什么?能否扩充整数Bresenham算法使之能处理当线段端点坐标值不是整数的情况(比端点坐标先取整数产生的直线更精确)。
如果线段端点坐标值不是整数,DDA算法和Bresenham算法产生的直线不完全相同。DDA算法是在直线附近寻找最靠近直线的象素点。而端点坐标值先取整再用Bresenham算法,因为端点坐标值先取整,与原直线相比,可能会改变直线的斜率。因此两种算法相比,前者比后者更精确。
可以将整数Bresenham算法扩充为实数Bresenham算法。算法中的变量都应采用实数类型,在绘制时再对实数坐标值取整数,这样做比端点坐标先取整数产生的直线更精确,具体算法如下:
void BresenhamLine(double x1, double y1, double x2, double y2)
{
int x,y?;
double dx,dy,p;
x=(int)(x1+0.5);
y=(int)(y1+0.5);
dx=x2-x1;
dy=y2-y1;
p=2*dy*(x-x1+1)-dx*(2*y-2*y1+1);
for(;x=x2;x++)
{
SetPixel(x,y);
if(p=0)
{
原创力文档

文档评论(0)