- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch03直线、圆、椭圆生成2008
1、扫描转换直线段;第三章 直线、圆、椭圆生成算法;任何图形的光栅化,必须显示在一个窗口内,否则不予显示。即确定一个图形的哪些部分在窗口内,哪些在窗口外,即裁剪。 ;图形显示前需要:扫描转换+裁剪;屏幕坐标定义;;直线段的扫描转换算法;假定直线的起点、终点分别为:(x0,y0), (x1,y1),且都为整数。记直线的斜率为k。;基本思想;即:当x每递增1,y递增k(即直线斜率);;数值微分(DDA)法;数值微分(DDA)法;#include stdlib.h
#include math.h
inline int round (const float a) { return int (a + 0.5); }
void lineDDA (int x0, int y0, int xEnd, int yEnd)
{
int dx = xEnd - x0, dy = yEnd - y0, steps, k;
float xIncrement, yIncrement, x = x0, y = y0;
if (fabs (dx) fabs (dy)) steps = fabs (dx);
else steps = fabs (dy);
xIncrement = float (dx) / float (steps);
yIncrement = float (dy) / float (steps);
setPixel (round (x), round (y));
for (k = 0; k steps; k++) {
x += xIncrement;
y += yIncrement;
setPixel (round (x), round (y));
}
};例:画直线段P0(0,0)--P1(5,2);假定直线斜率0k1,且已确定点亮象素点P(xp ,yp ),则下一个与直线最接近的像素只能是P1点或P2点。设M为中点,Q为交点;中点画线法;中点画线法;中点画线法;中点画线法;中点画线法;中点画线法;中点画线法;中点画线法;Bresenham画线算法;又;pi 的增量算法;|k|1时直线Bresenham算法;Bresenham画线算法;#include stdlib.h
#include math.h
/* |m|1.0 Bresenham 画线过程*/
void lineBres (int x0, int y0, int xEnd, int yEnd)
{
int dx=fabs(xEnd-x0), dy=fabs(yEnd-y0);
int p=2*dy-dx;
int twoDy=2*dy, twoDyMinusDx=2*(dy-dx);
int x, y;
/* 确定那一个端点作为画线起点 */
if (x0 xEnd) {
x = xEnd;
y = yEnd;
xEnd = x0;
}
else {
x = x0;
y = y0;
}
setPixel (x, y); ;BresenhamLine(x0,y0,x1,y1,color)
int x0,y0,x1,y1,color;
{
int x,y,dx,dy,e;
dx = x1-x0; dy = y1-y0;
d= -dx; x=x0; y=y0;
for( i=0; i=dx; i++){
drawpixel(x,y,color);
x++; d=d+2*dy;
if(d =0)
{y++; d=d–2*dx;}
}
} ;圆的扫描转换算法;角度DDA法;利用圆的对称性,只须讨论1/8圆。第二个8
文档评论(0)