001/**
002 * Copyright (c) 2011, The University of Southampton and the individual contributors.
003 * All rights reserved.
004 *
005 * Redistribution and use in source and binary forms, with or without modification,
006 * are permitted provided that the following conditions are met:
007 *
008 *   *  Redistributions of source code must retain the above copyright notice,
009 *      this list of conditions and the following disclaimer.
010 *
011 *   *  Redistributions in binary form must reproduce the above copyright notice,
012 *      this list of conditions and the following disclaimer in the documentation
013 *      and/or other materials provided with the distribution.
014 *
015 *   *  Neither the name of the University of Southampton nor the names of its
016 *      contributors may be used to endorse or promote products derived from this
017 *      software without specific prior written permission.
018 *
019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
020 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
021 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
022 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
023 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
025 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
026 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
028 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029 */
030package org.openimaj.math.util;
031
032/**
033 * Data structure for a complex number with real and imaginary parts.
034 */
035public class Complex {
036    /**
037     * The real part
038     */
039    public double re=0;
040    
041    /**
042     * The imaginary part 
043     */
044    public double im=0;
045
046    /**
047     * Create a complex number with real and imaginary parts set to 0.
048     */
049    public Complex(){}
050
051    /**
052     * Create a complex number with the specified real and
053     * imaginary values.
054     * @param re the real part
055     * @param im the imaginary part
056     */
057    public Complex(double re, double im) {
058        this.re=re;
059        this.im=im;
060    }
061    
062    /** 
063     * Set the real part. 
064     * @param re the real part 
065     */
066    public void setRE(double re) {
067        this.re = re;
068    }
069    
070    /** 
071     * Set the imaginary part. 
072     * @param im the imaginary part;
073     */
074    public void setIM(double im) {
075        this.im = im;
076    }
077
078    /** 
079     * Return the real part. 
080     * @return the real part 
081     */
082    public double getRE() {
083        return this.re;
084    }
085
086    /** 
087     * Return the imaginary part. 
088     * @return the imaginary part
089     */
090    public double getIM() {
091        return this.im;
092    }
093
094    /** 
095     * Return the magnitude of this complex number. 
096     * @return the magnitude
097     */
098    public double getMagnitude() {
099        double sum = this.re*this.re+this.im*this.im;
100        return Math.sqrt(sum);
101    }
102
103    /** Text representation of this complex number. */
104    @Override
105        public String toString() {
106        return im<0 ? String.format("%4.3f%4.3fj", re, im) : String.format("%4.3f+%4.3fj", re, im);
107    }
108}