Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

ComplexNumber.h

Go to the documentation of this file.
00001 #ifndef ComplexNumber_H
00002 #define ComplexNumber_H
00003 /*########################################################################
00004         File:                   ComplexNumber.h
00005         Creation date:  25th May 2002
00006 
00007         Copyright 2002 Mark Williams, all rights reserved.
00008         Contact: mark@extrabit.com
00009         http://www.extrabit.com
00010 
00011         This program is free software; you can redistribute it and/or
00012         modify it under the terms of the GNU General Public License
00013         as published by the Free Software Foundation; either version 2
00014         of the License, or (at your option) any later version.
00015 
00016         This program is distributed in the hope that it will be useful,
00017         but WITHOUT ANY WARRANTY; without even the implied warranty of
00018         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019         GNU General Public License for more details.
00020 
00021 ########################################################################*/
00022 
00023 /*########################################################################
00024         Headers
00025 ########################################################################*/
00026 
00027 /*########################################################################
00028         Declarations
00029 ########################################################################*/
00030 
00031 /*########################################################################
00032         Class Definition
00033 ########################################################################*/
00034 
00040 class ComplexNumber
00041 {
00042 public:
00043         ComplexNumber (void) { m_x = m_y = 0.0 ; }
00044         ComplexNumber (double x, double y) { m_x = x ; m_y = y ; }
00045 
00046         const double& x (void) const { return m_x ; }
00047         const double& y (void) const { return m_y ; }
00048         double& x (void) { return m_x ; }
00049         double& y (void) { return m_y ; }
00050 
00051         double inq_magnitude2 (void) const ;
00052         ComplexNumber inq_square (void) const ;
00053         ComplexNumber inq_cube (void) const ;
00054         ComplexNumber inq_inverse (void) const ;
00055 
00056         const ComplexNumber& operator+= (const ComplexNumber&) ;
00057         const ComplexNumber& operator-= (const ComplexNumber&) ;
00058         ComplexNumber operator+ (const ComplexNumber&) const ;
00059         ComplexNumber operator- (const ComplexNumber&) const ;
00060         ComplexNumber operator* (const ComplexNumber&) const ;
00061 
00062 private:
00064         double m_x ;
00065 
00067         double m_y ;
00068 } ;
00069 
00070 
00073 inline double ComplexNumber::inq_magnitude2 (void) const
00074 {
00075         return m_x*m_x + m_y*m_y ;
00076 }
00077 
00078 
00081 inline ComplexNumber ComplexNumber::inq_square (void) const
00082 {
00083         return ComplexNumber (m_x*m_x - m_y*m_y, 2.0*m_x*m_y) ;
00084 }
00085 
00086 
00089 inline ComplexNumber ComplexNumber::inq_cube (void) const
00090 {
00091         double x2 = m_x*m_x ;
00092         double y2 = m_y*m_y ;
00093         return ComplexNumber (m_x*x2 - 3.0*m_x*y2, -m_y*y2 + 3.0*x2*m_y) ;
00094 }
00095 
00096 
00099 inline ComplexNumber ComplexNumber::inq_inverse (void) const
00100 {
00101         double a = m_x*m_x + m_y*m_y ;
00102         return ComplexNumber (m_x/a, -m_y/a) ;
00103 }
00104 
00105 
00108 inline const ComplexNumber& ComplexNumber::operator+= (const ComplexNumber& z)
00109 {
00110         m_x += z.m_x ;
00111         m_y += z.m_y ;
00112         return *this ;
00113 }
00114 
00115 
00118 inline const ComplexNumber& ComplexNumber::operator-= (const ComplexNumber& z)
00119 {
00120         m_x -= z.m_x ;
00121         m_y -= z.m_y ;
00122         return *this ;
00123 }
00124 
00125 
00128 inline ComplexNumber ComplexNumber::operator+ (const ComplexNumber& z) const
00129 {
00130         return ComplexNumber (m_x + z.m_x, m_y + z.m_y) ;
00131 }
00132 
00133 
00136 inline ComplexNumber ComplexNumber::operator- (const ComplexNumber& z) const
00137 {
00138         return ComplexNumber (m_x - z.m_x, m_y - z.m_y) ;
00139 }
00140 
00141 
00144 inline ComplexNumber ComplexNumber::operator* (const ComplexNumber& z) const
00145 {
00146         return ComplexNumber (m_x*z.m_x - m_y*z.m_y, m_x*z.m_y + m_y*z.m_x) ;
00147 }
00148 
00149 
00152 inline ComplexNumber operator* (const ComplexNumber& z, double s)
00153 {
00154         return ComplexNumber (s*z.x(), s*z.y()) ;
00155 }
00156 
00157 
00160 inline ComplexNumber operator* (double s, const ComplexNumber& z)
00161 {
00162         return ComplexNumber (s*z.x(), s*z.y()) ;
00163 }
00164 
00165 
00166 /*########################################################################
00167         End
00168 ########################################################################*/
00169 #endif

Generated on Sun Jul 21 11:52:14 2002 for FractalViewer by doxygen1.2.16