闻心阁

一蓑烟雨看苍生,半壶浊酒笑红尘

二维图形旋转变换

2011-06-02 约 1 分钟读完 搬砖秘籍

接着说计算机图形学实习,这次说的算法是二维图形的旋转变换,本例所使用的算法完全原创,这是我个人根据数学公式推导出来的。不是书上说的矩阵方法实现,通过我这个例子完全可以360度,顺逆时针去旋转图形!

老规矩,还是封装成一个函数,直接调用即可

下面是我的代码:

//***旋转的一系列函数*****

//x为角度

//CPoint p[],int m多边形

void allpoints(float x,CPoint p[],int m)

{

for (int i=0;i<m;i++)

{

int tx=p[i].x-600;

int ty=350-p[i].y;

//求r

float r=sqrtf((tx)(tx)+(ty)(ty));

//求初始角度

//float iniJD=acosf(tx/r);

//float nowJD=x/180*3.1415926;

float iniJD;

if (ty>0)

{

iniJD=acosf(tx/r)/3.1415926*180;

}

else

{

//iniJD=asinf(ty/r)/3.1415926*180;

iniJD=-1acosf(tx/r)/3.1415926180;

}

float temp=(iniJD-x)/180*3.1415926;

p[i].x=r*cosf(temp)+600;

p[i].y=-1rsinf(temp)+350;

}

}

void S4GraphDbx::XZ(float x,CDC *pDC)//旋转的函数

{

int index=m_dbx.size();

for (int i=0;i<index;i++)

{

if (m_dbx.at(i).isSelect==1)

{

allpoints(x,m_dbx.at(i).m_point,m_dbx.at(i).m_num);

}

}

while (index)

{

m_dbx.at(index-1).Draw(pDC);

index–;

}

}

声明

这是我从自己的类中直接摘出来的函数,如果要使用请适当修改。

PS~终于写了个原创的代码