圆内正切三角形坐标点计算.
已知圆心位置(x,y),半径(r),如何計算出三角形的各個坐標點?
或者:如何根据角度计算坐标?

解决方案 »

  1.   

         /// <summary>
            /// 通过点坐标算得到角度
            /// </summary>
            /// <param name="xy">图边上的某点坐标</param>
            /// <param name="origin">原心坐标</param>
            /// <returns></returns>
            private float XYToDegrees(Point xy, Point origin)
            {
                double angle = 0.0;            if (xy.Y < origin.Y)
                {
                    if (xy.X > origin.X)
                    {
                        angle = (double)(xy.X - origin.X) / (double)(origin.Y - xy.Y);
                        angle = Math.Atan(angle);
                        angle = 90.0 - angle * 180.0 / Math.PI;
                    }
                    else if (xy.X < origin.X)
                    {
                        angle = (double)(origin.X - xy.X) / (double)(origin.Y - xy.Y);
                        angle = Math.Atan(-angle);
                        angle = 90.0 - angle * 180.0 / Math.PI;
                    }
                }
                else if (xy.Y > origin.Y)
                {
                    if (xy.X > origin.X)
                    {
                        angle = (double)(xy.X - origin.X) / (double)(xy.Y - origin.Y);
                        angle = Math.Atan(-angle);
                        angle = 270.0 - angle * 180.0 / Math.PI;
                    }
                    else if (xy.X < origin.X)
                    {
                        angle = (double)(origin.X - xy.X) / (double)(xy.Y - origin.Y);
                        angle = Math.Atan(angle);
                        angle = 270.0 - angle * 180.0 / Math.PI;
                    }
                }            if (angle > 180) angle -= 360; //Optional. Keeps values between -180 and 180
                return (float)angle;
            }
            
            /// <summary>
            /// 通过点坐标计算得到新的坐标
            /// </summary>
            /// <param name="center">以哪一点为坐标原点</param>
            /// <param name="point">转前的坐标</param>
            /// <param name="angleInDegree">转的角度</param>
            /// <returns></returns>
            public static Point Rotate(PointF center, PointF point, float angleInDegree)
            {
                System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix();
                matrix.Rotate(angleInDegree);                                                     // 构造一个逆时针旋转的矩阵            PointF[] points = { new PointF(point.X - center.X, point.Y - center.Y) };        // 把坐标原点移到'那个原点'那里
                matrix.TransformPoints(points);                                                 // 旋转
                int x = (int)(center.X + points[0].X);
                int y = (int)(center.Y + points[0].Y);
                return new Point(x, y);                                                        // 把坐标原点移回去
            }
    我工程里用的,你参考一下
      

  2.   

    圆内正切三角形是什么东东?public Point FindPoint(double a)
    {
    return new Point(x+r*Math.Cos(a),y+r*Math.Sin(a));
    }