首页 / PYTHON / Python – 绘制多边形
Python – 绘制多边形
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python – 绘制多边形,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2825字,纯文字阅读大概需要5分钟。
内容图文
![Python – 绘制多边形](/upload/InfoBanner/zyjiaocheng/767/dc52593271444a0fb72f7c38d63c3f85.jpg)
所以我试图使用点类绘制不同的多边形.我创建了一个名为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, a):
if not isinstance(a, 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, p2)
print >> sys.stdout, line
p1=p2
s = s-1
内容总结
以上是互联网集市为您收集整理的Python – 绘制多边形全部内容,希望文章能够帮你解决Python – 绘制多边形所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。