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();
}
}
}
输出结果如下