//fXIn:x方向与中心点的差值。(中心点x坐标 - 当前点x坐标 算出)
//fYIn:Y方向与中心点的差值。(中心点Y坐标 - 当前点y坐标 算出)
//fDeltaAngle 旋转的角度(比如顺时针旋转90°, 此值为 -90°*π/180°)
//*fXOut 和 *fYOut 得出旋转后点与中心点的差值,有正有负
//最后计算目标坐标值:x中心点坐标 -(*fXOut)得出 最终旋转后x坐标值
// y中心点坐标 -(*fYOut)得出 最终旋转后y坐标值
void GetPointAfterAngle(double fXIn, double fYIn, double fDeltaAngle, double *fXOut, double *fYOut)
{
double fAngleIn = 0.0;
if((fYIn == 0) && (fXIn == 0))
{
fXOut = &fXIn;
fYOut = &fXIn;
return;
}
if(fXIn == 0)
{
if(fYIn > 0)
{
fAngleIn = PI / 2;
}
if(fYIn < 0)
{
fAngleIn = 3 * PI / 2;
}
}
if(fYIn == 0)
{
if(fXIn > 0)
{
fAngleIn = 0;
}
if(fXIn < 0)
{
fAngleIn = PI;
}
}
if((fYIn > 0) && (fXIn != 0))
{
fAngleIn = atan(fYIn / fXIn);
if(fAngleIn < 0)
fAngleIn = fAngleIn + PI;
}
if((fYIn < 0) && (fXIn != 0))
{
fAngleIn = atan(fYIn / fXIn);
if(fAngleIn < 0)
fAngleIn = fAngleIn + 2 * PI;
else
fAngleIn = fAngleIn + PI;
}
double dAngleOut = fAngleIn + fDeltaAngle;
double fR = pow(fYIn * fYIn + fXIn * fXIn, 0.5);
*fXOut = fR * cos(dAngleOut);
*fYOut = fR * sin(dAngleOut);
}