1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include "Complex.h"
- #include <math.h>
-
- float complex_abs( const Complex * c ) {
- return sqrt( pow( c->re, 2 ) + pow( c->im, 2 ) );
- }
-
- float complex_arg( const Complex * a )
- {
- return atan2( a->im, a->re );
- }
-
- Complex complex_comjunction( const Complex * a ) {
- Complex c = { a->re, - a->im };
- return c;
- }
-
- float complex_phi( const Complex * c ) {
- float phi = 0.0;
-
- // quadrant I
- if ( c->re >= 0 && c->im >= 0 ) phi = atan( c->im / c->re );
- // quadrant II, III
- if ( c->re < 0 ) phi = atan( c->im / c->re ) + M_PI;
- // quadrant IV
- if ( c->re > 0 && c->im < 0 ) phi = atan( c->im / c->re ) + 2 * M_PI;
-
- return phi * 180.0 / M_PI;
- }
-
- Complex complex_scalar_mul( const Complex * a, const float b ) {
- Complex c = { 0.0, 0.0 };
- float o_re = b;
- float o_im = 0.0;
-
- c.re = a->re * o_re - a->im * o_im;
- c.im = a->re * o_im + o_re * a->im;
-
- return c;
- }
-
- Complex complex_mul( const Complex * a, const Complex * b ) {
- Complex c = { 0.0, 0.0 };
- float o_re = b->re;
- float o_im = b->im;
-
- c.re = a->re * o_re - a->im * o_im;
- c.im = a->re * o_im + o_re * a->im;
-
- return c;
- }
-
- Complex complex_add( const Complex * a, const Complex * b ) {
- Complex c = { 0.0, 0.0 };
- c.re = a->re + b->re;
- c.im = a->im + b->im;
-
- return c;
- }
-
- Complex complex_sub( const Complex * a, const Complex * b ) {
- Complex c = { 0.0, 0.0 };
- c.re = a->re - b->re;
- c.im = a->im - b->im;
-
- return c;
- }
-
- Complex complex_polar( float roh, float theta )
- {
- Complex c = { roh * cos( theta ), roh * sin( theta ) };
-
- return c;
- }
-
- Complex complex_pow( const Complex * a, int n )
- {
- float roh = pow( complex_abs( a ), n );
- float theta = complex_arg( a );
-
- return complex_polar( roh, ( float )( n ) * theta );
- }
|