def points(self, num=10): pts = self.involute_points(num = num) rot = rotation3D(-pi/self.z/2) pts = rot(pts) ref = reflection3D(pi/2) pts1 = ref(pts)[::-1] rot = rotation3D(2*pi/self.z) pt3 = rot(pts[0]) if self.add_foot: return(array([ [pts[0],pts[1]], pts[1:], [pts[-1], pts1[0]], pts1[:-1], [pts1[-2], pts1[-1]] ])) return(array([pts,[pts[-1],pts1[0]], pts1])) else: return(array([pts,[pts[-1],pts1[0]], pts1]))
def involute_points(self, num=10): pts = linspace(self.involute_start, self.involute_end, num=num) fx = self.involute_function_x() x = array(map(fx, pts)) fy = self.involute_function_y() y = array(map(fy, pts)) fz = self.involute_function_z() z = array(map(fz, pts)) xyz = transpose(array([x, y,z])) if self.add_foot: p = xyz[0] p1 =map(lambda x: x * (self.r_f / sqrt(p[0]**2 + p[1]**2)), p) p1[2] = self.z_f xyz=vstack([[p1], xyz]) xy = [[i[0]/i[2],i[1]/i[2],1.] for i in xyz] backlash_rot = rotation3D(self.backlash / 4) xy = backlash_rot(xy) return(xy)