开发工具:
文件大小: 220kb
下载次数: 0
上传时间: 2013-06-17
详细说明:
#include #include #include "resource.h" /* Ellipse: 1)-1 0 b^2*x0,对于下一个点我们应该尽量向内推,因此 x(i+1)=x(i)+1,y(i+1)=y(i)-1,dF=2*b^2*x+b^2-2*a^2*y+a^2 2)dy/dx>=-1 -> b^2*x>=a^2*y 可以看出y的减少率比x增长率高,我们应该减少y来看x的增长,于是排除(x+1,y)的可能 。 如果F(x,y)<=0,对于下一个点我们应该尽量向外推,因此 x(i+1)=x(i)+1,y(i+1)=y(i)-1,dF=2*b^2*x+b^2-2*a^2*y+a^2 如果F(x,y)>0,对于下一个点我们应该尽量向内推,因此 x(i+1)=x(i),y(i+1)=y(i)-1,dF=-2*a^2*y+a^2 */ #define G(x,y) b*b*x*x+a*a*y*y-a*a*b*b void DrawPixelPart(HDC hdc,int x0,int y0,int x,int y,int part,COLORREF color) { switch(part) { case 0: SetPixel(hdc,x0-x,y0-y,color);break; case 1: SetPixel(hdc,x0+x,y0-y,color);break; case 2: SetPixel(hdc,x0+x,y0+y,color);break; case 3: SetPixel(hdc,x0-x,y0+y,color);break; default: break; } } #define PI 3.14159 void DrawArcPart(HDC hdc,int x0,int y0,int a,int b,int arc_start,int arc_end,int part,COLORREF color) { int F,x,y,B=b*b,A=a*a,Bx,Ay,xend,yend; x=((double)a)*sin(arc_start*PI/180)+0.5;y=((double)b)*cos(arc_start*PI/180)+0.5; xend=((double)a)*sin(arc_end*PI/180)+0.5;yend=((double)b)*cos(arc_end*PI/180)+0.5; xend=max(xend,x);yend=min(yend,y); Bx=B*x;Ay=A*y; F=G(x,y); while(Bx=yend) { DrawPixelPart(hdc,x0,y0,x,y,part,color); if(F>0) { x++;y--;F+=2*Bx+B-2*Ay+A;Bx+=B;Ay-=A; } else { x++;F+=2*Bx+B;Bx=B*x;Bx+=B; } } if(Bx>=Ay) { while(x<=xend&&y>=yend) { DrawPixelPart(hdc,x0,y0,x,y,part,color); if(F>0) { y--;F+=A-2*Ay;Ay-=A; } else { x++;y--;F+=2*Bx+B-2*Ay+A;Bx+=B;Ay-=A; } } } } #define DrawPart(arc_start,arc_end,part) DrawArcPart(hdc,x0,y0,a,b,arc_start,arc_end,part,color) //用Bresenham算法生成的椭圆弧线,(x0,y0)为圆心,a为x截距,b为y截距,arc_start和arc_end使用角度表示,从-x旋转分别是角度开始/结束,color是颜色 void DrawArc(HDC hdc,int x0,int y0,int a,int b,int arc_start,int arc_end,COLORREF color) { int i,part_start,part_end; if(arc_start>arc_end)//保证arc_end>arc_start { i=arc_start; arc_start=arc_end; arc_end=i; } if(arc_end-arc_start>=360)//两个角差别大于360,就是全画 { DrawPart(0,90,0); DrawPart(0,90,1); DrawPart(0,90,2); DrawPart(0,90,3); return; } arc_start%=360;arc_end%=360; part_start=arc_start/90;part_end=arc_end/90; if(arc_start>arc_end)//后接式 { if(part_start%2)//偶数象限 DrawPart(arc_start%90,90,part_start); else DrawPart(90-arc_start%90,90,part_start); for(i=part_start+1;i<4;i++) DrawPart(0,90,i); if(part_end%2)//偶数象限 DrawPart(0,arc_end%90,part_end); else DrawPart(90-arc_end%90,90,part_end); for(i=0;i
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.