二维图形旋转变换
接着说计算机图形学实习,这次说的算法是二维图形的旋转变换,本例所使用的算法完全原创,这是我个人根据数学公式推导出来的。不是书上说的矩阵方法实现,通过我这个例子完全可以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~终于写了个原创的代码