|
Класс
Complex
Комплексные числа широко используются
не только в математике. Они часто применяются в графических преобразованиях,
в построении фракталов, не говоря уже о физике и технических дисциплинах. Но
класс, описывающий комплексные числа, почему-то не включен в стандартную библиотеку
Java. Восполним этот пробел.
Листинг 2.4 длинный, но просмотрите
его внимательно, при обучении языку программирования очень полезно чтение программ
на этом языке. Более того, только программы и стоит читать, пояснения автора
лишь мешают вникнуть в смысл действий (шутка).
Листинг 2.4.
Класс Complex
class
Complex
{
private
static final double EPS = le-12; // Точность вычислений
private
double re, im;
// Действительная и мнимая часть
// Четыре конструктора
Complex(double
re, double im) {
this, re = re; this.im = im;
}
Complex(double
re){this(re, 0.0); }
Complex(){this(0.0,
0.0); }
Complex(Complex
z){this(z.re, z.im) ; }
// Методы доступа
public
double getRe(){return re;}
public
double getlmf){return im;}
public
Complex getZ(){return new Complex(re, im);}
public
void setRe(double re){this.re = re;}
public
void setlm(double im){this.im = im;}
public
void setZ(Complex z){re = z.re; im = z.im;}
// Модуль и аргумент комплексного числа
public
double mod(){return Math.sqrt(re * re + im * im);}
public
double arg()(return Math.atan2(re, im);}
// Проверка: действительное число?
public
boolean isReal(){return Math.abs(im) < EPS;}
public
void pr(){ // Вывод на экран
System.out.println(re + (im < 0.0 ? "" : '"+") + im +
"i");
}
// Переопределение методов класса Object
public
boolean equals(Complex z){
return Math.abs(re -'z.re) < EPS &&
Math.abs(im - z.im) < EPS;
}
public
String toString(){
return "Complex: " + re + " " + im;
}
// Методы, реализующие операции +=, -=, *=, /=
public
void add(Complex z){re += z.re; im += z.im;}
public
void sub(Complex z){re -= z.re; im —= z.im;}
public
void mul(Complex z){
double t = re * z.re — im * z. im;
im = re * z.im + im * z.re;
re = t;
}
public
void div(Complex z){
double m = z.mod();
double t = re * z.re — im * z.im;
im = (im * z.re — re * z.im) / m;
re = t / m;
}
// Методы, реализующие операции +, -, *, /
public
Complex plus(Complex z){
return new Complex(re + z.re, im + z im);
}
public
Complex minus(Complex z){
return new Complex(re - z.re, im - z.im);
}
public
Complex asterisk(Complex z){
return new Complex(
re * z.re - im * z.im, re * z.im + im * z re);
}
public Complex
slash(Complex z){
double
m = z.mod();
return
new Complex(
(re * z.re - im * z.im) / m, (im * z.re - re * z.im) / m);
}
}
//
Проверим работу класса Complex
public class
ComplexTest{
public
static void main(Stringf] args){
Complex zl = new Complex(),
z2 = new Complex(1.5),
z3 = new Complex(3.6, -2.2),
z4 = new Complex(z3);
System.out.printlnf); // Оставляем пустую
строку
System.out.print("zl = "); zl.pr();
System.out.print("z2 = "); z2.pr();
System.out.print("z3 = "); z3.pr();
System.out.print ("z4 = "}; z4.pr();
System.out.println(z4); // Работает метод toString()
z2.add(z3);
System.out.print("z2 + z3 = "}; z2.pr();
z2.div(z3);
System.out.print("z2 / z3 = "); z2.pr();
z2 = z2.plus(z2);
System.out.print("z2 + z2 = "); z2.pr();
z3 = z2.slash(zl);
System.out.print("z2 / zl = "); z3.pr();
}
}
На рис. 2.3 показан вывод этой программы.
Рис. 2.3.
Вывод
программы ComplexTest
|