这个程序主要的思想来自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);