弧度可以用这个办法算出来,但是大于一个Math.PI的弧度是在不知道怎么算,求大家帮忙
public static float Angle(Point cen, Point first, Point second) 
        { 
            float dx1, dx2, dy1, dy2; 
            float angle;             dx1 = first.X - cen.X; 
            dy1 = first.Y - cen.Y;             dx2 = second.X - cen.X;             dy2 = second.Y - cen.Y;             float c = (float)Math.Sqrt(dx1 * dx1 + dy1 * dy1) * (float)Math.Sqrt(dx2 * dx2 + dy2 * dy2);             if (c == 0) return -1;             angle = (float)Math.Acos((dx1 * dx2 + dy1 * dy2) / c); 
            return angle; 
        } 

解决方案 »

  1.   

    假定Point cen为圆心,与Point first形成的射线为起始射线,顺时针为正
      

  2.   

    就相当于 已知ab射线,和点c,问ab射线顺时针旋转几度与c相交
      

  3.   

    三角函数基本都还给老师了,就记得一句“奇变偶不变,符号看象限”,结果只能用笨办法,用下面这个方法分别算出两个点针对原点转过的角度,然后相减即可        /// <summary>
            /// 计算某一个点针对原点转过的弧度,以正上方为0,正左方为PI/2,正下方为PI,正右方为3/2PI
            /// </summary>
            /// <param name="x"></param>
            /// <param name="y"></param>
            /// <returns></returns>
            public double GetPointAngel(int x,int y)
            {
                if (y == 0)
                    if (x == 0) return 0;
                    else if (x > 0) return Math.PI / 2;
                    else return Math.PI / 2 * 3;              double angel = Math.Atan(Math.Abs((double)x)/Math.Abs((double)y));
                
                //根据象限调整
                if(x<0)
                    if(y<0)
                        //第三象限
                        angel += Math.PI;  
                    else
                        //第四象限
                        angel = Math.PI*2-angel ;  
                else
                    if(y<0)
                        //第二象限
                        angel = Math.PI - angel;             return angel; 
            }
      

  4.   

    大于Pi,用Pi*2 减就可以了4楼的奇变偶不变,符号看象限就是这个道理
      

  5.   

    是么,那楼上我出个题:
    给你起点A和终点B的坐标,现要求在直线AB终点旁边画两条小直线形成一个箭头,要求两条小直线以B为圆心分别和AB顺时针和逆时针偏移一定角度。偏移的角度和小直线的长度都是常量,请写个程序计算需要的坐标
      

  6.   

     double angel = Math.Atan(Math.Abs((double)x)/Math.Abs((double)y));
    ==> double angel = Math.Atan(Math.Abs((double)y)/Math.Abs((double)x));
    ??