petri_dish
annotate vector.py @ 19:b78c555543a8
added vector module
author | Yashina Ksenia <ksenia_yashina@kodomo.fbb.msu.ru> |
---|---|
date | Mon, 20 Dec 2010 01:42:34 +0300 |
parents | |
children |
rev | line source |
---|---|
ksenia_yashina@19 | 1 from math import * |
ksenia_yashina@19 | 2 |
ksenia_yashina@19 | 3 class Vector(object): |
ksenia_yashina@19 | 4 def __init__(self,x,y): |
ksenia_yashina@19 | 5 self.x=x |
ksenia_yashina@19 | 6 self.y=y |
ksenia_yashina@19 | 7 def __abs__(self): |
ksenia_yashina@19 | 8 return sqrt(self.x**2+self.y**2) |
ksenia_yashina@19 | 9 def __add__(self,other): |
ksenia_yashina@19 | 10 return Vector(self.x+other.x,self.y+other.y) |
ksenia_yashina@19 | 11 def __sub__(self,other): |
ksenia_yashina@19 | 12 return Vector(self.x-other.x,self.y-other.y) |
ksenia_yashina@19 | 13 def __mul__(self,digit): |
ksenia_yashina@19 | 14 return Vector(digit*self.x,digit*self.y) |
ksenia_yashina@19 | 15 def angle(self): |
ksenia_yashina@19 | 16 if self.x==0: |
ksenia_yashina@19 | 17 if self.y>0: |
ksenia_yashina@19 | 18 return -pi/2 |
ksenia_yashina@19 | 19 else: |
ksenia_yashina@19 | 20 return pi/2 |
ksenia_yashina@19 | 21 if self.y==0: |
ksenia_yashina@19 | 22 if self.x>0: |
ksenia_yashina@19 | 23 return 0 |
ksenia_yashina@19 | 24 else: |
ksenia_yashina@19 | 25 return pi |
ksenia_yashina@19 | 26 m=abs(self) |
ksenia_yashina@19 | 27 if acos(self.x/m)>pi/2 or (acos(self.x/m)>pi/2 and asin(self.y/m)<0): |
ksenia_yashina@19 | 28 return atan(self.y/self.x)-pi |
ksenia_yashina@19 | 29 else: |
ksenia_yashina@19 | 30 return atan(self.y/self.x) |
ksenia_yashina@19 | 31 def angleToCoord(self,angle): |
ksenia_yashina@19 | 32 magn=abs(self) |
ksenia_yashina@19 | 33 self.x=magn*cos(angle) |
ksenia_yashina@19 | 34 self.y=magn*sin(angle) |
ksenia_yashina@19 | 35 return self |
ksenia_yashina@19 | 36 def magnitToCoord(self,m): |
ksenia_yashina@19 | 37 ang=self.angle() |
ksenia_yashina@19 | 38 self.x=m*cos(ang) |
ksenia_yashina@19 | 39 self.y=m*sin(ang) |
ksenia_yashina@19 | 40 return self |