前面讲了如何使用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#已知圆周上三点计算圆心
(adsbygoogle = window.adsbygoogle || []).push({});
这里需要注意两个地方,在测试代码的时候容易让你怀疑人生。
- 在进行浮点运算时,一定不要让整型参与,建议统一格式化成浮点类型。
- 浮点数转字符串时不要直接使用
ToString()
,要写成ToString("0.00")
这样。
几位小数随便你,我在测试时遇到浮点数0.0000000XX这种使用ToString()
结果给我变成了1.0000000XX。
© 版权声明
1、本网站名称:club资源网
2、本站永久网址:cscxyz.club
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长QQ:2737238215进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
THE END
请登录后发表评论
注册