中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 综合文章
Breseham椭圆绘画算法演变出来的程序!
作者:未知 时间:2005-07-27 21:53 出处:CSDN 责编:chinaitpower
              摘要:Breseham椭圆绘画算法演变出来的程序!

这个程序主要的思想来自Breseham算法,
演变的东西就是增加了旋转!
算法描述就不写了,敲打起来很累!

把程序罗列出来吧!

Mfc 代码如下:

////////////////////////////////////////////////////////////////////////////////////

//BreEllipse

//(xc,yc)----------椭圆中心

//fla,flb----------横轴和纵轴的半径

//double-----------旋转的角度

////////////////////////////////////////////////////////////////////////////////////

void BreEllipse(CDC *pDC,float xc ,float yc,float fla,float flb,double angle)

{

int i;

float a,b,x,y;

    double dx,dy,di,aa,bb,sinA,cosA;

cosA=cos(angle);

sinA=sin(angle);

a=fla;

    b=flb;

aa=a*a;

bb=b*b;

float flX[4],flY[4];

x=0;

y=b;

dx=0;

dy=2*aa*y;

di=bb-aa*b+aa/4;

flX[0]=xc+x*cosA-y*sinA;

flX[1]=xc+x*cosA+y*sinA;

flX[2]=xc-x*cosA-y*sinA;

flX[3]=xc-x*cosA+y*sinA;

flY[0]=yc+y*cosA+x*sinA;

flY[1]=yc-y*cosA+x*sinA;

flY[2]=yc+y*cosA-x*sinA;

flY[3]=yc-y*cosA-x*sinA;

i=0;

while(dx<dy)

{

i++;

if(i==5)

{

pDC->MoveTo(flX[0],flY[0]);

pDC->LineTo(xc+x*cosA-y*sinA,yc+y*cosA+x*sinA);

pDC->MoveTo(flX[1],flY[1]);

pDC->LineTo(xc+x*cosA+y*sinA,yc-y*cosA+x*sinA);

pDC->MoveTo(flX[2],flY[2]);

pDC->LineTo(xc-x*cosA-y*sinA,yc+y*cosA-x*sinA);

pDC->MoveTo(flX[3],flY[3]);

pDC->LineTo(xc-x*cosA+y*sinA,yc-y*cosA-x*sinA);

flX[0]=xc+x*cosA-y*sinA;

flX[1]=xc+x*cosA+y*sinA;

flX[2]=xc-x*cosA-y*sinA;

flX[3]=xc-x*cosA+y*sinA;

flY[0]=yc+y*cosA+x*sinA;

flY[1]=yc-y*cosA+x*sinA;

flY[2]=yc+y*cosA-x*sinA;

flY[3]=yc-y*cosA-x*sinA;

i=0;

}

x++;

dx+=2*bb;

di+=dx+bb;

if(di>=0)

{

dy-=2*aa;

di-=dy;

y--;

}

}

pDC->MoveTo(flX[0],flY[0]);

pDC->LineTo(xc+x*cosA-y*sinA,yc+y*cosA+x*sinA);

pDC->MoveTo(flX[1],flY[1]);

pDC->LineTo(xc+x*cosA+y*sinA,yc-y*cosA+x*sinA);

pDC->MoveTo(flX[2],flY[2]);

pDC->LineTo(xc-x*cosA-y*sinA,yc+y*cosA-x*sinA);

pDC->MoveTo(flX[3],flY[3]);

pDC->LineTo(xc-x*cosA+y*sinA,yc-y*cosA-x*sinA);

 

di+=int((3*(aa-bb)-2*(dx-dy))/4+0.5);

flX[0]=xc+x*cosA-y*sinA;

flX[1]=xc+x*cosA+y*sinA;

flX[2]=xc-x*cosA-y*sinA;

flX[3]=xc-x*cosA+y*sinA;

flY[0]=yc+y*cosA+x*sinA;

flY[1]=yc-y*cosA+x*sinA;

flY[2]=yc+y*cosA-x*sinA;

flY[3]=yc-y*cosA-x*sinA;

i=0;

while(y>0)

{

i++;

if(i==5)

{

pDC->MoveTo(flX[0],flY[0]);

pDC->LineTo(xc+x*cosA-y*sinA,yc+y*cosA+x*sinA);

pDC->MoveTo(flX[1],flY[1]);

pDC->LineTo(xc+x*cosA+y*sinA,yc-y*cosA+x*sinA);

pDC->MoveTo(flX[2],flY[2]);

pDC->LineTo(xc-x*cosA-y*sinA,yc+y*cosA-x*sinA);

pDC->MoveTo(flX[3],flY[3]);

pDC->LineTo(xc-x*cosA+y*sinA,yc-y*cosA-x*sinA);

flX[0]=xc+x*cosA-y*sinA;

flX[1]=xc+x*cosA+y*sinA;

flX[2]=xc-x*cosA-y*sinA;

flX[3]=xc-x*cosA+y*sinA;

flY[0]=yc+y*cosA+x*sinA;

flY[1]=yc-y*cosA+x*sinA;

flY[2]=yc+y*cosA-x*sinA;

flY[3]=yc-y*cosA-x*sinA;

i=0;

}

y--;

dy-=2*aa;

di+=aa-dy;

if(di<0)

{

dx+=2*bb;

di+=dx;

x++;

}

}

pDC->MoveTo(flX[0],flY[0]);

pDC->LineTo(xc+x*cosA-y*sinA,yc+y*cosA+x*sinA);

pDC->MoveTo(flX[1],flY[1]);

pDC->LineTo(xc+x*cosA+y*sinA,yc-y*cosA+x*sinA);

pDC->MoveTo(flX[2],flY[2]);

pDC->LineTo(xc-x*cosA-y*sinA,yc+y*cosA-x*sinA);

pDC->MoveTo(flX[3],flY[3]);

pDC->LineTo(xc-x*cosA+y*sinA,yc-y*cosA-x*sinA);

}

 

 


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有