You are here: Home / Community / Workshops / 2008 - Fribourg / Content / Shakespeare / Effect / bin / python / point.py

point.py

# not used
# last updated 29-Jul-2008 -- dmreagan

from vector import Vector2, Vector3

from math import sqrt

import sys

class Point2:
    def __init__(self, x = 0.0, y = 0.0):
        self.e = [float(x), float(y)]
        self.name = 'Point2'

    def Set(self, x, y):
        self.e[0], self.e[1] = x,y

    def SetX(self, x):
        self.e[0] = x

    def SetY(self, y):
        self.e[1] = y

    def x(self): return self.e[0]
    def y(self): return self.e[1]

    def length(self):
        return sqrt( self.e[0]*self.e[0] + self.e[1]*self.e[1])
    def squaredLength(self):
        return self.e[0]*self.e[0] + self.e[1]*self.e[1]

    def MakeUnitVector(self):
        l = self.length()
        try:
            x = self.e[0]/l
            y = self.e[1]/l
        except:
            print 'Error', sys.exc_type, sys.exc_value
            sys.exit(1)

        else:
            self.e[0], self.e[1] = x,y


    def __getitem__(self, i):
        return self.e[i]
    def __setitem__(self, i, val):
        self.e[i] = val
    def __add__(self, other):
        return Point2( self.e[0]+other[0], self.e[1] + other[1])
    def __sub__(self, other):
        if self.name != other.name:
            return Point2( self.e[0] - other[0], self.e[1] -  other[1])
        else:
            return Vector2( self.e[0] - other[0], self.e[1] -  other[1])
    def __repr__(self):
        return '%f %f' % (self.e[0], self.e[1])
    def __getattr__(self, name):
        return getattr(self, name)

class Point3:
    def __init__(self, x = 0, y = 0, z = 0):
        self.e = [float(x), float(y), float(z)]
        self.name = 'Point3'

    def Set(self, x, y, z):
        self.e[0], self.e[1], self.e[2] = x,y,z

    def SetX(self, x):
        self.e[0] = x

    def SetY(self, y):
        self.e[1] = y
    def SetZ(self, z):
        self.e[2] = z

    def x(self): return self.e[0]
    def y(self): return self.e[1]
    def z(self): return self.e[2]

    def length(self):
        return sqrt( self.e[0]*self.e[0] + self.e[1]*self.e[1] +
                     self.e[2]*self.e[2])
    def squaredLength(self):
        return self.e[0]*self.e[0] + self.e[1]*self.e[1] + self.e[2]*self.e[2]

    def MakeUnitVector(self):
        l = self.length()
        try:
            x = self.e[0]/l
            y = self.e[1]/l
            z = self.e[2]/l
        except:
            print 'Error', sys.exc_type, sys.exc_value
            sys.exit(1)

        else:
            self.e[0], self.e[1], self.e[2] = x,y,z


    def __getitem__(self, i):
        return self.e[i]
    def __setitem__(self, i, val):
        self.e[i] = val
    def __add__(self, other):
        return Point3( self.e[0]+other[0], self.e[1] + other[1],
                        self.e[2]+other[2])
    def __sub__(self, other):
        if self.name != other.name:
            return Point3( self.e[0] - other[0], self.e[1] -  other[1],
                           self.e[2] - other[2])
        else:
            return Vector3( self.e[0] - other[0], self.e[1] -  other[1],
                           self.e[2] - other[2])
    def __repr__(self):
        return '%f %f %f' % (self.e[0], self.e[1], self.e[2])
    # infinite loop?
    def __getattr__(self, name):
        return getattr(self, name)



if __name__ == '__main__':
    from types import *
    p1 = Point3( 1,0,0)
    p2 = Point3(0,1,0)
    v1 = p2 - p1
    p3 = p1 + v1

##     print p1
##     print p2
##     print p3
##     print v1
##     print p1.name
##     print v1.name

by AMcneil last modified Feb 29, 2016 12:25 PM