public void CalculateDegree(Complex operand, int degree) { ComplexDegreeResult = new ComplexDegreeResultHolder(); var res = Complex.Pow(operand, degree); ComplexDegreeResult.Results.Add(new Complex(Math.Round(res.Real, 5), Math.Round(res.Imaginary, 5))); }
public void CalculateRadical(Complex operand, int degree) { ComplexDegreeResult = new ComplexDegreeResultHolder(); double a = operand.Real; double b = operand.Imaginary; bool numbersAreInteger = false; if (operand.Real == Math.Truncate(operand.Real) && operand.Imaginary == Math.Truncate(operand.Imaginary)) { long nod = NODCalculator.FindGreatestCommonDivisor((long)a, (long)b); a = a / nod; b = b / nod; numbersAreInteger = true; } ComplexDegreeResult.Mod = Math.Pow((Math.Pow(operand.Real, 2) + Math.Pow(operand.Imaginary, 2)), 1.0 / 2.0); double trigArg; double radMod = Math.Pow(ComplexDegreeResult.Mod, 1.0 / (double)degree); if (a != 0 && b != 0) { if (a > 0) { for (int i = 0; i < degree; i++) { if (numbersAreInteger) { ComplexDegreeResult.Arguments.Add($"arctg({Math.Round(b, 0)}/{Math.Round(a, 0)}) + 2*pi*{i}"); } else { ComplexDegreeResult.Arguments.Add($"arctg({Math.Round(b, 5)}/{Math.Round(a, 5)}) + 2*pi*{i}"); } trigArg = (Math.Atan(b / a) + 2 * Math.PI * i) / (double)degree; ComplexDegreeResult.Results.Add(new Complex(Math.Round(radMod * Math.Cos(trigArg), 5), Math.Round(radMod * Math.Sin(trigArg), 5))); } } else if (a < 0 && b > 0) { for (int i = 0; i < degree; i++) { if (numbersAreInteger) { ComplexDegreeResult.Arguments.Add($"pi + arctg({Math.Round(b, 0)}/{Math.Round(a, 0)}) + 2*pi*{i}"); } else { ComplexDegreeResult.Arguments.Add($"pi + arctg({Math.Round(b, 5)}/{Math.Round(a, 5)}) + 2*pi*{i}"); } trigArg = (Math.PI + Math.Atan(b / a) + 2 * Math.PI * i) / (double)degree; ComplexDegreeResult.Results.Add(new Complex(Math.Round(radMod * Math.Cos(trigArg), 5), Math.Round(radMod * Math.Sin(trigArg), 5))); } } else if (a < 0 && b < 0) { for (int i = 0; i < degree; i++) { if (numbersAreInteger) { ComplexDegreeResult.Arguments.Add($"-pi + arctg({Math.Round(b, 0)}/{Math.Round(a, 0)}) + 2*pi*{i}"); } else { ComplexDegreeResult.Arguments.Add($"-pi + arctg({Math.Round(b, 5)}/{Math.Round(a, 5)}) + 2*pi*{i}"); } trigArg = (-Math.PI + Math.Atan(b / a) + 2 * Math.PI * i) / (double)degree; ComplexDegreeResult.Results.Add(new Complex(Math.Round(radMod * Math.Cos(trigArg), 5), Math.Round(radMod * Math.Sin(trigArg), 5))); } } } else if (a == 0 && b != 0) { if (b > 0) { for (int i = 0; i < degree; i++) { if (numbersAreInteger) { ComplexDegreeResult.Arguments.Add($"pi/2 + 2*pi*{i}"); } else { ComplexDegreeResult.Arguments.Add($"pi/2 + 2*pi*{i}"); } trigArg = (Math.PI / 2 + 2 * Math.PI * i) / (double)degree; ComplexDegreeResult.Results.Add(new Complex(Math.Round(radMod * Math.Cos(trigArg), 5), Math.Round(radMod * Math.Sin(trigArg), 5))); } } else if (b < 0) { for (int i = 0; i < degree; i++) { if (numbersAreInteger) { ComplexDegreeResult.Arguments.Add($"-pi/2 + 2*pi*{i}"); } else { ComplexDegreeResult.Arguments.Add($"-pi/2 + 2*pi*{i}"); } trigArg = (-Math.PI / 2 + 2 * Math.PI * i) / (double)degree; ComplexDegreeResult.Results.Add(new Complex(Math.Round(radMod * Math.Cos(trigArg), 5), Math.Round(radMod * Math.Sin(trigArg), 5))); } } } else if (b == 0 && a != 0) { if (a > 0) { for (int i = 0; i < degree; i++) { if (numbersAreInteger) { ComplexDegreeResult.Arguments.Add($"2*pi*{i}"); } else { ComplexDegreeResult.Arguments.Add($"2*pi*{i}"); } trigArg = (2 * Math.PI * i) / (double)degree; ComplexDegreeResult.Results.Add(new Complex(Math.Round(radMod * Math.Cos(trigArg), 5), Math.Round(radMod * Math.Sin(trigArg), 5))); } } else if (a < 0) { for (int i = 0; i < degree; i++) { if (numbersAreInteger) { ComplexDegreeResult.Arguments.Add($"pi + 2*pi*{i}"); } else { ComplexDegreeResult.Arguments.Add($"pi + 2*pi*{i}"); } trigArg = (Math.PI + 2 * Math.PI * i) / (double)degree; ComplexDegreeResult.Results.Add(new Complex(Math.Round(radMod * Math.Cos(trigArg), 5), Math.Round(radMod * Math.Sin(trigArg), 5))); } } } else { ComplexDegreeResult.Results.Add(new Complex(0, 0)); } }