计算机图形学-画椭圆和圆
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
double sqa = a*a;
double sqb = b*b;
double d = sqb + sqa*(0.25 -b);
int x = 0;
int y = b;
Ellipsepot( x0, y0, x, y);
// 1
while (sqb*(x + 1) < sqa*(y - 0.5))
(
if (d < 0)
(
d += sqb*(2 * x + 3);
) else
(
d += (sqb*(2 * x + 3) + sqa*((-2)*y + 2));
--y;
)
++x;
Ellipsepot( x0, y0, x, y);
)
d = ( b * (x + 0.5)) * 2 + ( a * (y - 1)) * 2 - ( a * b) * 2;
圆、椭圆的中点算法
学 院:计算机科学与技术学院
专 业:软件工程
班 级:软工152
学 号:08
学生姓名:刘强坤
姓名
刘强坤
学号
408
实验组
实验时间
10-24
指导教师
成绩
实验项目名称
圆,椭圆中点算法
实
验
要
求
优化后的算法:二次差分法
可任意指定圆心坐标
实
验
目
的
实
验
环
境
VS 2015
实
验
内
容
圆:
void Bresenham_Circle( int xc, int yc, int r) (
专业:软件工程
班级:软工152
y--;
)
x++;
glVertex2i(x +xc, y +yc);
glVertex2i(y +xc, x +yc);
glVertex2i(y +xc, -x +yc);
glVertex2i(x +xc, -y +yc);
glVertex2i(-x +xc,-y +yc);
// 2
setPixel(( x0 + x), ( y0 - y));
// 3
setPixel(( x0 - x), ( y0 - y));
// 4
setPixel(( x0 - x), ( y0 + y));
)
//中点画椭圆算法
void MidPoint_Ellipse( int x0, int y0, int a, int b) (
int x, y, d;
x = 0;
y = r;
d = 3 - 2 * r;
glVertex2i(x + xc, y + yc);
while (x < y)
(
if (d < 0)
(
d = d + 4 * x + 6;
)
else
(
d = d + 4 * (x - y) + 10;
学院:计算机科学与技术
// 2
while (y > 0)
(
if (d < 0)
(
d += sqb * (2 * x + 2) + sqa * ((-2) * y + 3);
++x;
)
else
(
d += sqa * ((-2) * y + 3);
)
--y;
Ellipsepot( x0, y0, x, y);
)
)
实
验
结wenku.baidu.com
果
结
签名:2017年10月24日
glVertex2i(-y +xc,-x +yc);
glVertex2i(-x +xc,y +yc);
glVertex2i(-y +xc,x +yc);
)
)
椭圆:
void Ellipsepot( int x0, int y0, int x, int y)
(
//1
setPixel(( x0 + x), ( y0 + y));
double sqb = b*b;
double d = sqb + sqa*(0.25 -b);
int x = 0;
int y = b;
Ellipsepot( x0, y0, x, y);
// 1
while (sqb*(x + 1) < sqa*(y - 0.5))
(
if (d < 0)
(
d += sqb*(2 * x + 3);
) else
(
d += (sqb*(2 * x + 3) + sqa*((-2)*y + 2));
--y;
)
++x;
Ellipsepot( x0, y0, x, y);
)
d = ( b * (x + 0.5)) * 2 + ( a * (y - 1)) * 2 - ( a * b) * 2;
圆、椭圆的中点算法
学 院:计算机科学与技术学院
专 业:软件工程
班 级:软工152
学 号:08
学生姓名:刘强坤
姓名
刘强坤
学号
408
实验组
实验时间
10-24
指导教师
成绩
实验项目名称
圆,椭圆中点算法
实
验
要
求
优化后的算法:二次差分法
可任意指定圆心坐标
实
验
目
的
实
验
环
境
VS 2015
实
验
内
容
圆:
void Bresenham_Circle( int xc, int yc, int r) (
专业:软件工程
班级:软工152
y--;
)
x++;
glVertex2i(x +xc, y +yc);
glVertex2i(y +xc, x +yc);
glVertex2i(y +xc, -x +yc);
glVertex2i(x +xc, -y +yc);
glVertex2i(-x +xc,-y +yc);
// 2
setPixel(( x0 + x), ( y0 - y));
// 3
setPixel(( x0 - x), ( y0 - y));
// 4
setPixel(( x0 - x), ( y0 + y));
)
//中点画椭圆算法
void MidPoint_Ellipse( int x0, int y0, int a, int b) (
int x, y, d;
x = 0;
y = r;
d = 3 - 2 * r;
glVertex2i(x + xc, y + yc);
while (x < y)
(
if (d < 0)
(
d = d + 4 * x + 6;
)
else
(
d = d + 4 * (x - y) + 10;
学院:计算机科学与技术
// 2
while (y > 0)
(
if (d < 0)
(
d += sqb * (2 * x + 2) + sqa * ((-2) * y + 3);
++x;
)
else
(
d += sqa * ((-2) * y + 3);
)
--y;
Ellipsepot( x0, y0, x, y);
)
)
实
验
结wenku.baidu.com
果
结
签名:2017年10月24日
glVertex2i(-y +xc,-x +yc);
glVertex2i(-x +xc,y +yc);
glVertex2i(-y +xc,x +yc);
)
)
椭圆:
void Ellipsepot( int x0, int y0, int x, int y)
(
//1
setPixel(( x0 + x), ( y0 + y));