C#计算结果为nan,哪里出问题了

C#计算结果为nan,哪里出问题了

代码如下

using System;
namespace ConsoleApp2
{
    class Point
    {
        public double x;
        public double y;
    }
    class AbstractCalculation
    {
        public virtual Point Crosscal(Point pa, Point pb, double a, double b)
        {
            throw new Exception("TODO");
        }
    }
    class JLJH : AbstractCalculation
    {
        public override Point Crosscal(Point pa, Point pb, double a, double b)
        {
            double Dab = Math.Sqrt((pa.x - pb.x) * (pa.x - pb.x) + (pa.y - pb.y) * (pa.y - pb.y));
            double Za = Math.Acos((Dab * Dab + a * a - b) / (2 * Dab * a));
            double Zb = Math.Acos((Dab * Dab + b * b - a * a) / (2 * Dab * b));
            double Zab = Math.Atan((pb.y - pa.y) / (pb.x - pa.x));
            double Zap = Zab - Za;
            double Zbp = Zap + Zb;
            double xp1 = pa.x + a * Math.Cos(Zap);
            double yp1 = pa.y + a * Math.Sin(Zap);
            double xp2 = pb.x + b * Math.Cos(Zbp);
            double yp2 = pb.y + b * Math.Sin(Zbp);
            Point resultP = new Point();
            resultP.x = (xp1 + xp2)/2;
            resultP.y = (yp1 + yp2)/2;
            return resultP;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Point paa = new Point();
            paa.x = 1.0;
            paa.y = 1.0;
            Point pbb = new Point();
            pbb.x = 5.5;
            pbb.y = 6.6;
            double aa = 45;
            double bb = 63;
            Point resultPP = new Point();
            //距离交会计算
            AbstractCalculation ac = new JLJH();
            resultPP = ac.Crosscal(paa, pbb, aa, bb);

            Console.WriteLine($"x:{resultPP.x} x:{resultPP.y}");
            Console.ReadKey();
        }
    }
}

输出结果如下

img

Dab变量值有问题,调用Math.Acos返回nan了,后续操作nan都是得到nan。题主检查下Dab怎么计算法的。

img

断点,一步一步跟,看从哪一步开始就不符合你的预期了,不要靠猜

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632