def recalculate(self): # Настройка шагов аппроксимации circle_count = self.approximation_step circle_points_count = self.approximation_step + 2 # Считаем окружность self.geom.clear() angle_step = 2*math.pi/circle_points_count for circle_number in range(0, circle_count): radius_for_point_1 = self.radius * math.sqrt(1 - math.pow((circle_count - (circle_number+1))/circle_count, 2)) z_axis_for_point_1 = self.radius * (circle_count-(circle_number+1))/circle_count radius_for_point_2 = self.radius * math.sqrt(1 - math.pow((circle_count - circle_number)/circle_count, 2)) z_axis_for_point_2 = self.radius * (circle_count - circle_number) / circle_count angle = 0 while angle < 2*math.pi: self.geom.points.append(Geometry.from_polar(radius_for_point_1, angle, z_axis_for_point_1)) self.geom.points.append(Geometry.from_polar(radius_for_point_1, angle+angle_step, z_axis_for_point_1)) self.geom.edges.append((len(self.geom.points)-2, len(self.geom.points)-1)) self.geom.points.append(Geometry.from_polar(radius_for_point_2, angle, z_axis_for_point_2)) self.geom.points.append(Geometry.from_polar(radius_for_point_2, angle+angle_step, z_axis_for_point_2)) self.geom.edges.append((len(self.geom.points)-2, len(self.geom.points)-1)) angle += angle_step angle = 2*math.pi while angle > 0: self.geom.points.append(Geometry.from_polar(radius_for_point_1, angle, -z_axis_for_point_1)) self.geom.points.append(Geometry.from_polar(radius_for_point_1, angle-angle_step, -z_axis_for_point_1)) self.geom.edges.append((len(self.geom.points)-2, len(self.geom.points)-1)) self.geom.points.append(Geometry.from_polar(radius_for_point_2, angle, -z_axis_for_point_2)) self.geom.points.append(Geometry.from_polar(radius_for_point_2, angle-angle_step, -z_axis_for_point_2)) self.geom.edges.append((len(self.geom.points)-2, len(self.geom.points)-1)) angle -= angle_step for index in range(0, len(self.geom.points), 4): self.geom.faces.append((index, index+1, index+3, index+2)) self.geom.apply_projection(self.projection_name)
def recalculate(self): # Настройка шагов аппроксимации circle_count = self.approximation_step circle_points_count = self.approximation_step + 2 # Считаем окружность self.geom.clear() angle_step = 2 * math.pi / circle_points_count for circle_number in range(0, circle_count): radius_for_point_1 = self.radius * math.sqrt(1 - math.pow( (circle_count - (circle_number + 1)) / circle_count, 2)) z_axis_for_point_1 = self.radius * ( circle_count - (circle_number + 1)) / circle_count radius_for_point_2 = self.radius * math.sqrt(1 - math.pow( (circle_count - circle_number) / circle_count, 2)) z_axis_for_point_2 = self.radius * (circle_count - circle_number) / circle_count angle = 0 while angle < 2 * math.pi: self.geom.points.append( Geometry.from_polar(radius_for_point_1, angle, z_axis_for_point_1)) self.geom.points.append( Geometry.from_polar(radius_for_point_1, angle + angle_step, z_axis_for_point_1)) self.geom.edges.append( (len(self.geom.points) - 2, len(self.geom.points) - 1)) self.geom.points.append( Geometry.from_polar(radius_for_point_2, angle, z_axis_for_point_2)) self.geom.points.append( Geometry.from_polar(radius_for_point_2, angle + angle_step, z_axis_for_point_2)) self.geom.edges.append( (len(self.geom.points) - 2, len(self.geom.points) - 1)) angle += angle_step angle = 2 * math.pi while angle > 0: self.geom.points.append( Geometry.from_polar(radius_for_point_1, angle, -z_axis_for_point_1)) self.geom.points.append( Geometry.from_polar(radius_for_point_1, angle - angle_step, -z_axis_for_point_1)) self.geom.edges.append( (len(self.geom.points) - 2, len(self.geom.points) - 1)) self.geom.points.append( Geometry.from_polar(radius_for_point_2, angle, -z_axis_for_point_2)) self.geom.points.append( Geometry.from_polar(radius_for_point_2, angle - angle_step, -z_axis_for_point_2)) self.geom.edges.append( (len(self.geom.points) - 2, len(self.geom.points) - 1)) angle -= angle_step for index in range(0, len(self.geom.points), 4): self.geom.faces.append((index, index + 1, index + 3, index + 2)) self.geom.apply_projection(self.projection_name)