package fr.unistra.pelican.util; /** * Class representing a complex number. * Largely copied from the HIPR2 project. */ public class ComplexNumber { public double real; public double imag; public ComplexNumber(){ } public ComplexNumber(double r, double i){ real = r; imag = i; } public ComplexNumber(ComplexNumber c){ real = c.real; imag = c.imag; } public double magnitude(){ return Math.sqrt(this.cNorm()); } public double phaseAngle(){ if(real==0 && imag == 0) return 0; else return Math.atan(imag/real); } double cNorm (){ return real*real + imag*imag; } public static ComplexNumber cExp (ComplexNumber z){ ComplexNumber x,y; x = new ComplexNumber(Math.exp(z.real),0.0); y = new ComplexNumber(Math.cos(z.imag),Math.sin(z.imag)); return cMult (x,y); } public static ComplexNumber cMult (ComplexNumber z1, ComplexNumber z2){ ComplexNumber z3 = new ComplexNumber(); z3.real = (z1.real)*(z2.real) - (z1.imag)*(z2.imag); z3.imag = (z1.real)*(z2.imag) + (z1.imag)*(z2.real); return z3; } public static ComplexNumber cSum (ComplexNumber z1, ComplexNumber z2) { ComplexNumber z3 = new ComplexNumber(); z3.real = z1.real + z2.real; z3.imag = z1.imag + z2.imag; return z3; } public static ComplexNumber cDiv (ComplexNumber z1, ComplexNumber z2) { ComplexNumber z3 = new ComplexNumber(); double n = z2.cNorm(); z3.real = ((z1.real*z2.real) + (z1.imag*z2.imag)) / n; z3.imag = ((z2.real*z1.imag) - (z1.real*z2.imag)) / n; return z3; } public static ComplexNumber cDiff (ComplexNumber z1, ComplexNumber z2) { ComplexNumber z3 = new ComplexNumber(); z3.real = z1.real - z2.real; z3.imag = z1.imag - z2.imag; return z3; } }