让代码更简单

C#求圆周上一点绕圆心旋转后坐标

重要:本文最后更新于2021-07-21 09:19:22,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

前面讲了如何使用C#拟合圆,取得圆的半径与中心坐标,参阅C#已知圆周上三点计算圆心。接上文,求圆周上任意一点绕圆心旋转一定角度后的坐标。

假设对圆周上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转RotaryAngle角度后的新的坐标设为(x’, y’),有公式:

复制
    x'= (x - rx0)*cos(RotaryAngle) + (y - ry0)*sin(RotaryAngle) + rx0 ;
    y'=-(x - rx0)*sin(RotaryAngle) + (y - ry0)*cos(RotaryAngle) + ry0 ;

C#代码

复制
/// <summary>
/// 旋转后坐标
/// </summary>
/// <param name="center">圆心坐标</param>
/// <param name="fpoint">旋转前坐标</param>
/// <param name="alg">旋转角度</param>
/// <returns>旋转后坐标</returns>
mPoint PointRotate(mPoint center, mPoint fpoint, double alg)
{
mPoint lpoint;
alg = (alg / 180.0) * Math.PI;
double a = Math.Cos(alg);
double b = Math.Sin(alg);
lpoint.X = (fpoint.X - center.X) * a + (fpoint.Y - center.Y) * b + center.X;
lpoint.Y = -(fpoint.X - center.X) * b + (fpoint.Y - center.Y) * a + center.Y;
return lpoint;
}

mPoint的结构体这里就不贴了,请联系前文阅读:C#已知圆周上三点计算圆心

这里需要注意两个地方,在测试代码的时候容易让你怀疑人生。

  1. 在进行浮点运算时,一定不要让整型参与,建议统一格式化成浮点类型。
  2. 浮点数转字符串时不要直接使用ToString(),要写成ToString("0.00")这样。

几位小数随便你,我在测试时遇到浮点数0.0000000XX这种使用ToString()结果给我变成了1.0000000XX。

感觉很棒!可以赞赏支持我哟~

8 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐