资源简介
计算机图形学内容,中点画(椭)圆法,Bresenham画(椭)圆法的具体实现代码,内有中文注释。

代码片段和文件信息
#include
#include
#include
#include
#include
int round(double x)
{
double t=x-int(x);;
if(t<0.5) return int(x);
if(t>0.5) return int(x)+1;
if(t==0.5&&int(x)%2==0) return int(x);
if(t==0.5&&int(x)%2!=0) return int(x)+1;
}
void Swap(double xdouble y)
{
double t;
t=x;
x=y;
y=t;
}
int Sign(double x){
if (x>0)return 1;
if (x<0)return -1;
if (x==0)return 0;
}
void CirclePoints(HDC hdcint xint yint xsint ys){ //利用八方对称性画圆上的点
if (x+xs==0){
SetPixel(hdcx+xsy+ysRGB(100100100));
SetPixel(hdcx+xs-y+ysRGB(100100100));
SetPixel(hdc-y+xsx+ysRGB(100100100));
SetPixel(hdcy+xsx+ysRGB(100100100));
}
if(y+ys==0){
SetPixel(hdcx+xsy+ysRGB(100100100));
SetPixel(hdc-x+xsy+ysRGB(100100100));
SetPixel(hdcy+xs-x+ysRGB(100100100));
SetPixel(hdcy+xsx+ysRGB(100100100));
}
if(x+xs==y+ys){
SetPixel(hdcx+xsy+ysRGB(100100100));
SetPixel(hdc-x+xsy+ysRGB(100100100));
SetPixel(hdc-x+xs-y+ysRGB(100100100));
SetPixel(hdcx+xs-y+ysRGB(100100100));
}
if(x+xs==-y+ys){
SetPixel(hdcx+xsy+ysRGB(100100100));
SetPixel(hdc-x+xsy+ysRGB(100100100));
SetPixel(hdc-x+xs-y+ysRGB(100100100));
SetPixel(hdcx+xs-y+ysRGB(100100100));
}
else
{
SetPixel(hdcx+xsy+ysRGB(100100100));
SetPixel(hdc-x+xsy+ysRGB(100100100));
SetPixel(hdc-x+xs-y+ysRGB(100100100));
SetPixel(hdcx+xs-y+ysRGB(100100100));
SetPixel(hdc-y+xsx+ysRGB(100100100));
SetPixel(hdc-y+xs-x+ysRGB(100100100));
SetPixel(hdcy+xs-x+ysRGB(100100100));
SetPixel(hdcy+xsx+ysRGB(100100100));
}
}
void EllipsePoints(HDC hdcint xint yint xsint ys){ //利用椭圆的四方对称性画椭圆上的点
SetPixel(hdcx+xsy+ysRGB(100100100));
SetPixel(hdc-x+xsy+ysRGB(100100100));
SetPixel(hdc-x+xs-y+ysRGB(100100100));
SetPixel(hdcx+xs-y+ysRGB(100100100));
}
void DDALine(HDC hdcdouble xsdouble ysdouble xedouble ye)//DDALine
{
double x;
double y;
if(xs>xe) //确定左右端点
{ double t;
t=xs;
xs=xe;
xe=t;
t=ys;
ys=ye;
ye=t;
}
//垂直X轴
if(xs==xe){
x=round(xs);
y=round(ys);
for(;y<=ye;y++){
SetPixel(hdcxyRGB(100100100));
}
}
//平行X轴
if(ys==ye){
x=round(xs);
y=round(ys);
for(;x<=xe;x++){
SetPixel(hdcxyRGB(100100100));
}
}
if(xs!=xe&&ys!=ye){
double dx=xe-xs;
double dy=ye-ys;
double k=dy/dx;
//|k|<=1
if(k!=0&&k<=1&&k>=-1){
x=round(x);
for(x=xsy=ys;x<=xe;x++){
SetPixel(hdcxround(y)RGB(100100100));
y+=k;
}
}
//|k|>1
if(k>1||k<-1){
if(ys>ye) //确定左右端点
{ double t;
t=xs;
xs=xe;
xe=t;
t=ys;
ys=ye;
ye=t;
}
y=round(ys);
k=dx/dy;
for(x=xsy=ys;y<=ye;y++){
SetPixel(hd
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7790 2009-04-15 23:04 graph.cpp
文件 208984 2009-04-15 23:04 program.exe
----------- --------- ---------- ----- ----
216774 2
相关资源
- DDA算法、中点bresenham算法及bresenham算
- 圆的扫描转换,中点bresenham画圆算法
- mfc数值微分算法和Bresenham算法画直线
- 鼠标交互画圆及椭圆基于Bresenham、中
- VC++ Bresenham Midpoint 算法画线圆椭圆
- c++ 、MFC 实现中点画圆算法及工程代码
- DDA、中点画线法、Bresenham算法
- Bresenham画线连成多边形并填充
- Bresenham画圆算法和中点圆整数优化算
- 计算机图形学直线段的扫描转换C++实
- Bresenham直线算法的C++实现
- 完全Bresenham算法生成椭圆
- 基于VC6.0的Bresenham直线算法
- MFC画线三种算法包括画圆,画点
- 计算机图形学大实验直线DDA和bresenh
- MFC中点画圆Bresenham算法画圆
- vc++实现bresenham生成直线
- c++ OpenGL DDA/Bresenham 算法画直线, 多
评论
共有 条评论