def __init__(self,*args,**kws): self.Not_null = True self._pos=None #inherit default attributes and functions common to all PyGeo elements. Overide #defaults where desired. Element.__init__(self,*args,**kws) self.color = kws.get("color",CYAN) #set defaults for keyword arguments specific to Points and derived classes. self.pointsize=kws.get("pointsize",.1) if self.label: self.fontsize=kws.get("fontsize",TINYFONT) self.fontcolor=kws.get("fontcolor",BLACK) self.fontXoffset=kws.get("fontXoffset",self.pointsize/10.+3) self.fontYoffset=kws.get("fontYoffset",self.pointsize/10.+3) if self.trace: self.tmparray=CPosition() self.tmparray.set(self) self.tracecurve=kws.get("tracecurve",True) self.mintrace=kws.get("mintrace",.0001) self.maxtrace=kws.get("maxtrace",50.) self.tracewidth=kws.get("tracewidth",self.pointsize/2.0) self.tracecolor=kws.get("tracecolor",self.color) self.deps=[]
class _zPoint(CPosition,Element,Z_Draw.zPoint): """ :definition: an O dimensional object with a defined postion on the complex plane . :inherits: `class. Element`,base.CPosition, base.zdraw.zPoint :site ref: http://en.wikipedia.org/wiki/Complex_number :attributes: - real: the real coordinate - imag the imaginary coordinate :keywords: inherited keywords: from `class Element`_ : =========== ============================ ================= ===================== Keyword Definition Type Default =========== ============================ ================= ===================== color drawn color of object list of 3 numbers [0,1,1] (CYAN) level visibility "level" - see GUI integer 1 trace toggle for tracing function boolean False texture texture for Povray output string None =========== ============================ ================= ===================== class keywords: =========== ========================== =================== ===================== pointsize size of drawn point numeric .1 label label rendered for point string None tracewidth width of trace curve numeric pointsize/2 tracecolor color of trace curve list of 3 numbers color fontsize fontsize of label constant TINYFONT fontcolor color of label font constant BLACK fontXoffset horizontal offset of label numeric pointsize/10.+ 3.0 fontYoffset vertical offset of label numeric pointsize/10.+ 3.0 =========== ========================== =================== ===================== """ __slots__= ("_pos","args","Not_null") __opts__= Element.__opts__[:] + ["pointsize","tracewidth","tracecolor", "maxtrace","mintrace", "fontsize", "fontcolor","fontXofffset","fontYofffset","tracecurve"] def __init__(self,*args,**kws): self.Not_null = True self._pos=None #inherit default attributes and functions common to all PyGeo elements. Overide #defaults where desired. Element.__init__(self,*args,**kws) self.color = kws.get("color",CYAN) #set defaults for keyword arguments specific to Points and derived classes. self.pointsize=kws.get("pointsize",.1) if self.label: self.fontsize=kws.get("fontsize",TINYFONT) self.fontcolor=kws.get("fontcolor",BLACK) self.fontXoffset=kws.get("fontXoffset",self.pointsize/10.+3) self.fontYoffset=kws.get("fontYoffset",self.pointsize/10.+3) if self.trace: self.tmparray=CPosition() self.tmparray.set(self) self.tracecurve=kws.get("tracecurve",True) self.mintrace=kws.get("mintrace",.0001) self.maxtrace=kws.get("maxtrace",50.) self.tracewidth=kws.get("tracewidth",self.pointsize/2.0) self.tracecolor=kws.get("tracecolor",self.color) self.deps=[] def __description(self, precision): if self.real != 0.: return self.__class__.__name__ + "(%.*g%+.*gj)"%(precision, self.real, precision, self.imag) else: return self.__class__.__name__ + "%.*gj"%(precision, self.imag) def __repr__(self): return self.__description(self.PREC_REPR) def __str__(self): return self.__description(self.PREC_STR) def do_trace(self): #If, on update, traced point has moved within limits defined by #'mintrace' and 'maxtrace' append its new position to the trace #curve delta= self.distance(self.tmparray) if (self.mintrace < delta < self.maxtrace): from pygeo.classes_complex.z_points import zFixedPoint self.rtrace.append(zFixedPoint(self.real,self.imag,pointsize=self.pointsize,color=self.tracecolor, level=self.level)) if self.tracecurve: self.ntrace.append(pos=self.pos) self.tmparray.set(self) def reset_trace(self): #Re-intialize list of traced curves to None""" if self.trace: for r in self.rtrace: r.show=False r.setshow() self.rtrace=[] self.tmparrayset(self) def reset_trace_curves(self): #Re-intialize list of traced curves to None""" if self.trace: self.ntrace.pos=[] def _findSelf(self): return True def _redraw(self): #If point is to be rendered, filter its postion to within drawing #range and set the position of the VPython sphere object, #representing the point, to the filtered position. Same as to any associated #label to be rendered. self.rend[0].pos =self.pos if self.label: self.lab.pos= self.pos def transform(self,mat,w_point): try: t1=inverse(mat) except LinAlgError: return False t2= conjugate(t1) t3= transpose(t1) h=Hermitian(matrixmultiply(t3,matrixmultiply(self.setHermitian(),t2))) w_point.from_hermitian(h) return True def uRotate(self,ucenter,angle): h_angle=angle/2. cs=cos(h_angle) sn=sin(h_angle) a=complex(cs,ucenter.z*sn) b=complex(-ucenter.y,ucenter.x)*sn c=-b.conjugate() d=a.conjugate() mat1=([[a,b],[c,d]]) mat2=self.homogenous() self.toC(matrixmultiply(mat1,mat2)) return True def toC(self,h_array): self.set(h_array[0]/h_array[1]) return True def uVector(self): modplus=self.mod2()+1 modminus=self.mod2()-1 xy=2*self/modplus z=modminus/modplus return vector(xy.real,xy.imag,z) def to_uSphere(self,upoint): upoint.set(self.uVector()) return True def from_hermitian(self,h): self.set(-h.C/h.A) def setHermitian(self): A=1 C=-self B=C.conjugate() D = B*C self._hermitian = Hermitian(conjugate(transpose(array([[A,B],[C,D]])))) return self._hermitian