An instance of this class represents one homogeneous coordinate. Here is the class interface.
# - - - - - c l a s s P t class Pt(object): '''Represents a homogeneous coordinate in 2-space. Exports: Pt(*coords): [ coords is a 2-sequence or a 1-sequence containing a 2-sequence -> return a new Pt instance representing those two values as x and y, respectively coords is a 1-sequence containing a 3-sequence -> return a new Pt instance representing those values as x, y, and w, respectively ] .xy(): [ return a 2-tuple with the homogenized x and y values ] .x(): [ return the homogenized x coordinate ] .y(): [ return the homogenized y coordinate ] .dist(other): [ other is a Pt instance -> return the distance between self and other ] .bearing(p): [ p is a Pt instance -> return the Cartesian angle in radians from self to p ] .radial(d, bearing): [ (d is a distance) and (bearing is an angle in radians) -> return the location at that distance and bearing as a Pt instance ] .toPolar(): [ return self in polar coordinates as a Polar instance ] .__str__(): [ return self as a string ] .__add__(self, other): [ other is a Pt instance -> return a new Pt instance whose coordinates are the sum of self's and other's ] .__sub__(self, other): [ other is a Pt instance -> return a new Pt instance whose coordinates are the self's minus other's ] .__cmp__(self, other): [ if self and other are the same point -> return 0 else -> return a nonzero value ]
So much for the externals. Internally we store the point as a 3-element numpy vector in which the W component is third.
State/Invariants: .v [ a numpy 3-element vector [x, y, W] ] '''