Python – 绘制多边形
发布时间:2020-12-20 13:10:43 所属栏目:Python 来源:网络整理
导读:所以我试图使用点类绘制不同的多边形.我创建了一个名为generate_polygon的类,它应该生成一个带有s边和x0的正多边形,y0是起始顶点. import sysimport mathimport Line_Point try: x0 = float(sys.argv[1]) y0 = float(sys.argv[2]) s = int(sys.argv[3])excep
所以我试图使用点类绘制不同的多边形.我创建了一个名为generate_polygon的类,它应该生成一个带有s边和x0的正多边形,y0是起始顶点.
import sys import math import Line_Point try: x0 = float(sys.argv[1]) y0 = float(sys.argv[2]) s = int(sys.argv[3]) except: print >> sys.stderr,'Syntax: generate_polygon.py x0 y0 s' sys.exit(1) p1 = Line_Point.Point(x0,y0) while s>0: p2 = Line_Point.Point(p1.x,p1.y) p2.rotate((2*math.pi)/s) line = Line_Point.Line(p1,p2) print >> sys.stdout,line p1=p2 s = s-1 它还使用另一个名为Line_Point的类: class Point: def __init__(self,x,y): if not isinstance(x,float): raise Error("Parameter "x" illegal.") self.x = x if not isinstance(y,float): raise Error ("Parameter "y" illegal.") self.y = y def rotate(self,a): if not isinstance(a,float): raise Error("Parameter "a" illegal.") original_x = self.x original_y = self.y # not necessary but looks cleaner self.x = math.cos(a) * original_x - math.sin(a) * original_y self.y = math.sin(a) * original_x + math.cos(a) * original_y class Line: def __init__(self,point0,point1): self.point0 = Point(point0.x,point0.y) self.point1 = Point(point1.x,point1.y) def rotate(self,float) or not isinstance(self.point0.x,float) or not isinstance(self.point1.y,float): raise Error("Parameter "a" illegal.") self.point0.rotate(a) self.point1.rotate(a) 我还使用另一个名为rotate的类,它从stdin读取行并将它们分成4个独立的部分并旋转每个部分: import sys import Line_Point try: a = float(sys.argv[1]) count = int(sys.argv[2]) except: print >> sys.stderr,'Syntax: rotate.py angle count' sys.exit(1) for L in sys.stdin: L = L.split() print L x0 = float(L[0]) y0 = float(L[1]) x = float(L[2]) y = float(L[3]) p0 = Line_Point.Point(x0,y0) p1 = Line_Point.Point(x,y) line = Line_Point.Line(p0,p1) for x in range(count): print L p0.rotate(a) 所以预期的输出是一个包含4个不同线部分的线文件.如果我使用python generate_polygon.py 0.0 250.0 3测试代码,那么预期的输出是: line 0 250 -217 -125 line -217 -125 217 -125 line 217 -125 0 250 但我最终得到的是: 0 250 -217 -125 -217 -125 217 125 217 125 217 125 所以有几个数字是完全错误的,并且在4行之前没有线.所以我认为问题出在我的generate_polygon类或我的旋转类中,但我似乎无法弄清问题是什么. 解决方法
我假设第一个函数rotate属于Point类,并没有正确缩进.这就是问题所在.第一行修改变量self.x,然后第二行使用已修改的值.你需要这个:
def rotate(self,a): original_x = self.x original_y = self.y # not necessary but looks cleaner self.x = math.cos(a) * original_x - math.sin(a) * original_y self.y = math.sin(a) * original_x + math.cos(a) * original_y 在顶部列表中的while循环之前,2 * math.pi / s是旋转每个新线段的角度.在计算过程中,此角度不应更改.由于每次循环都会减小s,因此应该在输入循环之前计算角度(无论如何这都是一个好习惯): angle = 2 * math.pi / s while s>0: p2 = Line_Point.Point(p1.x,p1.y) p2.rotate(angle) line = Line_Point.Line(p1,line p1=p2 s = s-1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |