Download | Plain Text | Line Numbers


/*
 * Copyright (c) 2008, Manuel Mausz <manuel at mausz.at>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the copyright holders nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 * DAMAGE.
 */
 
/**
 * Complex encapsulate a complex value
 *
 * @version 1.0
 * @author  Manuel Mausz (manuel at mausz.at)
 * @author  http://manuel.mausz.at/
 */
final public class Complex extends CalcValue
{
  final private double real;
  final private double img;
 
  /**
   * Constructor
   *
   * @param real real part
   * @param img imaginary part
   */
  Complex(double real, double img)
  {
    addOps();
    this.real = real;
    this.img  = img;
  }
 
  /**
   * Add supported operations
   */
  private void addOps()
  {
    addOp(new CalcOperator("+"), "add");
    addOp(new CalcOperator("-"), "sub");
    addOp(new CalcOperator("*"), "mul");
  }
 
  /**
   * @return real part
   */
  public double getReal()
  {
    return real;
  }
 
  /**
   * @return imaginary part
   */
  public double getImg()
  {
    return img;
  }
 
 
  /**
   * Converts instance to string
   *
   * @return string
   */
  public String toString()
  {
    return real + " " + img;
  }
 
  /**
   * Addition
   *
   * @param val
   * @return new Complex instance
   */
  public Complex add(Complex val)
  {
    return new Complex(real + val.getReal(), img + val.getImg());
  }
 
  /**
   * Subtraction
   *
   * @param val
   * @return new Complex instance
   */
  public Complex sub(Complex val)
  {
    return new Complex(real - val.getReal(), img - val.getImg());
  }
 
  /**
   * Multiplication
   *
   * @param val
   * @return new Complex instance
   */
  public Complex mul(Complex val)
  {
    double realnew = real * val.getReal() - img * val.getImg();
    double imgnew  = real * val.getImg()  + img * val.getReal();
    return new Complex(realnew, imgnew);
  }
}