你可以做同样的事情Matlab的功能以及使用复杂数学:
using System.Numerics;
public static class Foo
{
public static double GetAngle(double a, double expression)
{
Complex cA = new Complex(0, a);
Complex sqrt = Complex.Sqrt(expression);
Complex result = cA - sqrt;
return result.Phase;
}
}
如果您不想这样做,您可以看到,sqrt(expression)
是(正)虚轴上的数字,如果expression
为负,则表示a*i-sqrt(Expression) == (a-sqrt(abs(expression)))*i
的相位为π/ 2或3 *π/ 2 :
public static class Foo
{
public static double GetAngle(double a, double expression)
{
if (expression < 0.0)
{
double result = a - Math.Sqrt(-expression);
if (result > 0.0)
return Math.PI * 0.5;
else if (result < 0.0)
return Math.PI * 1.5;
else
return 0.0;
}
else
return Math.Atan2(a, -Math.Sqrt(expression));
}
}
帮助我与标题某人 – hey
取绝对值的表达式。请记住初中CAST。余弦在第4象限为正,所有功能在第1象限为正,在第2象限为正弦,在第3象限为正切。 – jdweng
@jdweng我认为这不会做,在MATLAB中sqrt(底片)给出了一个假想的数字,用于计算,通过使用abs值我改变结果,使C#将不会像matlab – hey