注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

旋转  

2015-12-15 14:30:39|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
B(x2,y2)饶A(x,y)
逆时针转θ角后的新坐标是
((x2-x)cosθ-(y2-y)sinθ ,
 (y2-y)cosθ+(x2-x)sinθ) 。
顺时针的话θ加个负号就是

        /// <summary>
        /// 获取移动角度的新坐标
        /// </summary>
        /// <param name="Rate">旋转角度</param>
        /// <param name="CirPoint">圆心坐标</param>
        /// <param name="MovePoint">移动的坐标</param>
        /// <returns></returns>
        private Point GetNewPoint(double Rate, Point CirPoint, Point MovePoint)
        { 
            double Rage2 = Rate / 180 * Math.PI;
            //B点绕A点转R度得到C点坐标,flag: 顺时针1,反时针-1:B是转的点,A是圆心
            //C.X=(B.X-A.X)*COS(R*flag)-(B.Y-A.Y)*Sin(R*flag);
            //C.Y= (B.Y-A.Y)*COS(R*flag)+(B.X-A.X)*sin(R*flag);
            //转的点坐标-圆心坐标
            //圆心坐标+计算坐标=新位置的坐标
            int newx = (int)((MovePoint.X - CirPoint.X) * Math.Cos(Rage2) - (MovePoint.Y - CirPoint.Y) * Math.Sin(Rage2));
            int newy = (int)((MovePoint.Y - CirPoint.Y) * Math.Cos(Rage2) + (MovePoint.X - CirPoint.X) * Math.Sin(Rage2));
            Point newpoint=new Point(CirPoint.X + newx, CirPoint.Y + newy); 
            //计算长度
            double lineJ = Math.Sqrt(Math.Pow(Math.Max(newpoint.X, CirPoint.X) - Math.Min(newpoint.X, CirPoint.X), 2) + Math.Pow(Math.Max(newpoint.Y, CirPoint.Y) - Math.Min(newpoint.Y, CirPoint.Y), 2));
            return newpoint;
        }
  评论这张
 
阅读(123)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017