All pastes #1415103 Raw Edit

henke37

public text v1 · immutable
#1415103 ·published 2009-05-07 07:38 UTC
rendered paste body
package HTools.Math{

	public class Complex {

		public var im:Number;
		public var real:Number;

		public function Complex(r:Number=0,i:Number=0):void {
			im=i;
			real=r;
		}

		public function get mod():Number {
			return Math.sqrt(im*im+real*real);
		}
		
		public function set mod(m:Number) {
			var p:Number=phase;
			im=Math.sin(p)*m;
			real=Math.cos(p)*m;		
		}
		
		public function set phase(p:Number) {
			var m=mod;
			im=Math.sin(p)*m;
			real=Math.cos(p)*m;
		}
		
		public function get phase():Number {
			return Math.atan2(im,real);
		}

		public function addEq(x:Complex):void {
			im+=x.im;
			real+=x.real;
		}
		
		public function addClone(x:Complex):Complex {
			return new Complex(real+x.real,im+x.im);
		}

		public function subEq(x:Complex):void {
			im-=x.im;
			real-=x.real;
		}
		
		public function subClone(x:Complex):Complex {
			return new Complex(real-x.real,im-x.im);
		}

		public function mulEq(x:Complex):void {
			var realT:Number=x.real*real-x.im*im;
			im=x.real*im+x.im*real;
			real=realT;
		}
		
		public function mulClone(x:Complex):Complex {
			return new Complex(
				x.real*real-x.im*im,
				x.real*im+x.im*real
			);
		}
		
		public function divEq(x:Complex):void {
			var divisor:Number=x.real*x.real+x.im*x.im;
			var realT:Number=(real*x.real+im*x.im)/divisor;
			im=(im*x.real-real*x.im)/divisor;
		}
		
		public function intDivEq(x:Number):void {
			im/=x;
			real/=x;
		}
		
		public function negEq():void {
			im=-im;
			real=-real;
		}
		
		public function clone():Complex {
			return new Complex(real,im);
		}
		
		public function toString():String {
			return real+"+i"+im;
		}
	}
}