弧度可以用这个办法算出来,但是大于一个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;
}
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;
}
/// 计算某一个点针对原点转过的弧度,以正上方为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;
}
给你起点A和终点B的坐标,现要求在直线AB终点旁边画两条小直线形成一个箭头,要求两条小直线以B为圆心分别和AB顺时针和逆时针偏移一定角度。偏移的角度和小直线的长度都是常量,请写个程序计算需要的坐标
==> double angel = Math.Atan(Math.Abs((double)y)/Math.Abs((double)x));
??