让代码更简单

当前位置:代码狗 > 开发教程 > 工业视觉教程 > 正文

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。

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

赞(2) 打赏

评论 抢沙发

×

请作者吃根烤肠!

支付宝