revision 905 by gross, Mon Nov 20 11:23:24 2006 UTC revision 916 by gross, Fri Dec 15 08:25:57 2006 UTC
# Line 61  class Rotatation(Transformation): Line 61  class Rotatation(Transformation):
61      """      """
62      defines a rotation      defines a rotation
63      """      """
65         """         """
66         creates a rotation using to points to define the axis and a rotation angle         creates a rotation using an axis and a point on the axis
67         """         """
68         self.__point0=numarray.array(point0,type=_TYPE)         self.__axis=numarray.array(axis,type=_TYPE)
69         self.__point1=numarray.array(point1,type=_TYPE)         self.__point=numarray.array(point,type=_TYPE)
70         self.__axis=self.__point1-self.__point0         lax=numarray.dot(self.__axis,self.__axis)
lax=dot(self.__axis,self.__axis)
71         if not lax>0:         if not lax>0:
72            raise ValueError("points must be distinct.")            raise ValueError("points must be distinct.")
73         self.__axis/=math.sqrt(lax)         self.__axis/=math.sqrt(lax)
# Line 78  class Rotatation(Transformation): Line 77  class Rotatation(Transformation):
77         applies rotatation to x         applies rotatation to x
78         """         """
79         x=numarray.array(x,_TYPE)         x=numarray.array(x,_TYPE)
80         z=x-self.__point0         z=x-self.__point
81         z0=numarray.dot(z,self.__axis)         z0=numarray.dot(z,self.__axis)
82         z_per=z-z0*self.__axis         z_per=z-z0*self.__axis
83         z1=numarray.dot(z_per,z_per)         lz_per=numarray.dot(z_per,z_per)
84         if z1>0:         if lz_per>0:
85           axis1=z_per/math.sqrt(z1)           axis1=z_per/math.sqrt(lz_per)
86           axis2=__cross(self.__axis,axis1)           axis2=_cross(axis1,self.__axis)
87           axis2/=math.sqrt(axis2)           lax2=numarray.dot(axis2,axis2)
88           return z0*self.__axis+z1*(math.cos(self.__angle)*axis1-math.sin(self.__angle)*axis2)+self.__point0           if lax2>0:
89                axis2/=math.sqrt(lax2)
90                return z0*self.__axis+math.sqrt(lz_per)*(math.cos(self.__angle)*axis1-math.sin(self.__angle)*axis2)+self.__point
91             else:
92                return x
93         else:         else:
94           return x           return x
95  def __cross(x, y):  def _cross(x, y):
96      """      """
97      Returns the cross product of x and y      Returns the cross product of x and y
98      """      """
99      return numarray.array([x[1] * y[2] - x[2] * y[1], x[2] * y[0] - y[0] * x[2], x[0] * y[1] - y[1] * x[0]], _TYPE)      return numarray.array([x[1] * y[2] - x[2] * y[1], x[2] * y[0] - x[0] * y[2], x[0] * y[1] - x[1] * y[0]], _TYPE)
100
101  class Dilation(Transformation):  class Dilation(Transformation):
102      """      """
# Line 103  class Dilation(Transformation): Line 106  class Dilation(Transformation):
106         """         """
107         creates a dilation with a center an a given expansion/contraction factor         creates a dilation with a center an a given expansion/contraction factor
108         """         """
109         if not factor>0:         if not abs(factor)>0:
110            raise ValueError("factor must be positive.")            raise ValueError("factor must be non-zero.")
111         self.__factor=factor         self.__factor=factor
112         self.__center=numarray.array(center,type=_TYPE)         self.__center=numarray.array(center,type=_TYPE)
113      def __call__(self,x=numarray.zeros((3,))):      def __call__(self,x=numarray.zeros((3,))):

Legend:
 Removed from v.905 changed lines Added in v.916