File: Polar.sc

package info (click to toggle)
supercollider 1%3A3.6.6~repack-2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 23,792 kB
  • ctags: 25,269
  • sloc: cpp: 177,129; lisp: 63,421; ansic: 11,297; python: 1,787; perl: 766; yacc: 311; sh: 286; lex: 181; ruby: 173; makefile: 168; xml: 13
file content (60 lines) | stat: -rw-r--r-- 1,276 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Polar : Number {
	var <>rho, <>theta;

	*new { arg rho, theta;
		^super.newCopyArgs(rho, theta)
	}

	magnitude { ^rho }

	angle { ^theta }
	phase { ^theta }

	real { ^rho * cos(theta) }
	imag { ^rho * sin(theta) }

	asPolar { ^this }
	asComplex { ^Complex.new(this.real, this.imag) }
	asPoint { ^Point.new(this.real, this.imag) }

	scale { arg scale;
		^Polar.new(rho * scale, theta)
	}
	rotate { arg angle; // in radians
		^Polar.new(rho, theta + angle)
	}

	// do math as Complex
	+ { arg aNumber;  ^this.asComplex + aNumber  }
	- { arg aNumber;  ^this.asComplex - aNumber  }
  	* { arg aNumber;  ^this.asComplex * aNumber  }
	/ { arg aNumber;  ^this.asComplex / aNumber  }

	== { arg aPolar;
		^aPolar respondsTo: #[\rho, \theta] and: {
			rho == aPolar.rho and: { theta == aPolar.theta }
		}
	}

	hash {
		^rho.hash bitXor: theta.hash
	}

	neg { ^Polar.new(rho, theta + pi) }

	performBinaryOpOnSomething { |aSelector, thing, adverb|
		^thing.asComplex.perform(aSelector, this, adverb)
	}

	performBinaryOpOnUGen { arg aSelector, aUGen;
		^Complex.new(
			BinaryOpUGen.new(aSelector, aUGen, this.real),
			BinaryOpUGen.new(aSelector, aUGen, this.imag)
		);
	}

	printOn { arg stream;
		stream << "Polar( " << rho << ", " << theta << " )";
	}
	storeArgs { ^[rho,theta] }
}