计算机图形学中圆弧算法的代码,计算机图形学圆弧生成算法具体程序实现.doc...

计算机图形学圆弧生成算法具体程序实现

数学与软件科学学院 实验报告

学期: 2010 至 2011 第 一 学期 2010年 10月 5日

课程名称: 计算机图形学 专业:信息与计算科学2007级5班

实验编号: 03 实验项目: 圆弧生成算法

指导教师: 庞朝阳 学号实验成绩:

一、实验目的及要求

1:圆弧上的八个对称点的算法描述;

2:了解圆弧的的基本绘制算法;

3:绘制椭圆;

二.基本思想

1:圆弧被定义为到给定中心位置(x0,y0)距离为r的点集,圆心为与原点的圆有四条对称轴:x=0, y=0, x=y, x=-y 。已知圆弧上一点(x ,y),则可以的到关于四条对称轴的其他7个点(八对称性),因此只需要扫描八分之一的圆弧就可以求的整个圆弧的所有点。

三:首先来了解一下圆弧上的八个对称点的算法描述(以中心在原点,半径为整数R的圆为例)。

Void circlepoints(int x, int y ,int color)

{

Setpixel(x,y,color); setpixel(y, x,color);

Setpixel(-x,y,color); setpixel(y,-x,color);

Setpixel(x,-y,color); setpixel(-y,x,color);

Setpixel(-x,-y,color);setpixel(-y,-x,color);

}

四:八分之一圆弧的扫描变换的实现。

算法根据圆的基本方,沿X轴从0到/2R,以单位步长计算

对应的y值来获得圆周上每点的位置:y=,

缺点:算法每一步均包含大量的复杂计算(浮点乘)且所绘制的像素间隔不一致

解决方法:使用极坐标r和来计算圆弧上的点

∈(0,)

该算法使用了三角函数和浮点运算,运算速度依然很慢。

五:中点画圆法(以从(0,R)到(R/, R/)的1/8圆为例)

基本原理

假定当前已确定了圆弧上的一个个像素点P(x,y),则下一像素点只会是右方的P(x,y)或右下方的P(x,y)如图

构造函数F(x,y)=x+y-R,对于圆上的点有F(x,y)=0;对于圆外点有F(x,y)>0,对于圆内点有F(x,y)<0

设M为P、P的中点,即M(x,y).则当F(M)<0时,中点M在圆内,即P离圆弧较近,则取点P为F的下一像素。

F(M)>0时, P离圆弧较近,取P为F的下一像素点

当 F(M)=0时,约定取P。

根据以上原理,构造判别式:

d=F(M)= F(x,y)=(x)+( y)-R

若d<0,则取P为下一像素点,且再下一像素点的判别式为

d=F(M)= F(x,y)=(x)+( y)-R

= d+2x+3

若 d0 则取p作为下一像素点,且再下一像素点的判别式为

d= F(x,y)=(x)+( y)-R

= d+2(x-y)+5

取第一个像素点为(0.R)则判断式d的初始值为:

d=F=1.25-R

为避免浮点运算,令e=d-0.25

此时初始化运算d=1.25-R对应于e=1-R

判别式d<0对应于e

2.代码实现及结果:

#include

#include"stdafx.h"

using namespace std;

class Yuan

{

public:

int x;

int y;

int r;

int color;

public:

void MidpointCircle(int r,int color,CDC *pDC);

void CirclePoints(int x,int y,int color,CDC *pDC);

void Chu(int x,int y);

};

void Yuan::Chu(int x,int y)

{

this->x=x;

this->y=y;

}

void Yuan::CirclePoints(int x,int y,int color,CDC *pDC)

{

pDC->SetPixel(x+200,y+200,color);

pDC->SetPixel(y+200,x+200,color);

pDC->SetPixel(-x+200,y+200,color);

pDC->SetPixel(y+200,-x+200,color);

pDC->SetPixel(x+200,-y+200,color);

pDC->SetPixel(-y+200,x+200,color);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值