2015-07-11 69 views
0

我是Python编程的新手,我有一个任务来开发一个简单的程序,绘制n个边的多边形m次,使得边的最左边下一个多边形触摸上一个多边形的最右边。下面的代码根据用户输入的边数和多边形应显示的次数绘制一个多边形。如何绘制n个边的多边形,m次

import turtle 

def myTurtle(): 
    num_side = raw_input("Enter the number of sides: ") 
    num_shap = raw_input("Enter the number of shapes: ") 
    num_sides = int(num_side) 
    num_shape = int(num_shap) 
    window = turtle.Screen() 
    window.bgcolor("red") 

    polygon = turtle.Turtle() 
    polygon.penup() 
    polygon.goto(-200, 200) 
    polygon.pendown() 
    side_length = 60 
    angle = 360.0 // num_sides 
    n = 0 

    for j in range(0, num_shape): 
    polygon.forward(side_length) 
    for i in range(num_sides): 
     polygon.pencolor("black") 
     polygon.forward(side_length) 
     polygon.right(angle) 
    n += side_length  
window.exitonclick() 

myTurtle() 

我现在面临的问题是让下一个多边形转到上一个多边形的旁边。


我已经能够拿出一个更好,但仍然没有一个完美的解决方案。只是一些相互接触的多边形。我怎样才能做到这一点?

import turtle, math 

def find_lenth(radius, sides): 
    angle = float(360/sides) 
    otherangle = float((180 - angle)/2) 
    radangle = float(angle * (math.pi/180)) 
    radangle2 = float(otherangle * (math.pi/180)) 
    angles = math.sin(radangle)/math.sin(radangle2) 
    lenth = radius * angles 
    return lenth  

def myTurtle(): 
    num_side = raw_input("Enter the number of sides: ") 
    num_shap = raw_input("Enter the number of shapes: ") 
    num_sides = int(num_side) 
    num_shape = int(num_shap) 
    window = turtle.Screen() 
    window.bgcolor("red") 
    polygon = turtle.Turtle() 
    radius = 60 
    side_length = find_lenth(radius, num_sides) 
    angle = 360.0 // num_sides 
    delta = radius*2 #this value you must count 
    colors = ['blue','white','black','green'] 
    for i in range(num_shape): 
    polygon.penup() 
    polygon.goto(-400+delta*i, 200) 
    polygon.pendown() 
    polygon.pencolor(colors[i%4]) 
    n = 0 
    for j in range(num_sides): 
     polygon.forward(side_length) 
     polygon.right(angle) 
    window.exitonclick() 

if __name__ == '__main__': 
    myTurtle() 
+0

使用可变MAX_X记住的多边形的最大x坐标(它可以获取与龟图),然后用Y = 0且x = MAX_X用于下一多边形开始etc..Alternatively第一绘制将每个多边形的上半部分作为一个不间断的线条,然后返回到起始点,并将所有下半部分作为另一条不间断的线条绘制。 –

+0

** 1)**你在python 2或python 3上做这个吗? ** 2)**您可以使用'turtle.position()'方法获得当前的乌龟坐标。 ** 3)**将您的角度计算更改为'angle = 360.0/num_sides',否则它会将多边形的角度舍入为边数不是360的因子。例如,看看当前代码发生了什么告诉它绘制7边多边形。 ** 4)**您需要在多边形之间使用'penup()'。 –

+0

我正在做python 2x – ibonly01

回答

-1

此代码会绘制一些多边形。为了将指针移动到正确的像素值,您需要对其进行计数。

import turtle 

def myTurtle(): 
    num_side = raw_input("Enter the number of sides: ") 
    num_shap = raw_input("Enter the number of shapes: ") 
    num_sides = int(num_side) 
    num_shape = int(num_shap) 
    window = turtle.Screen() 
    window.bgcolor("red") 
    polygon = turtle.Turtle() 
    side_length = 60 
    angle = 360.0 // num_sides 
    delta = side_length*3 #this value you must count 
    colors = ['blue','white','black','green'] 
    for i in range(num_shape): 
     polygon.penup() 
     polygon.goto(-400+delta*i, 200) 
     polygon.pendown() 
     polygon.pencolor(colors[i%4]) 
     n = 0 
     for j in range(num_sides): 
      polygon.forward(side_length) 
      polygon.right(angle) 
    window.exitonclick() 

if __name__ == '__main__': 
    myTurtle() 
+0

你的多边形没有触及。此外,你的角度计算是不正确的。 –

+0

多边形不接触。再次说明一点,如果用户输入5个边数和2个多边形数。它应该绘制5边的多边形,第二个多边形应该割炬的第一个多边形的边缘。 – ibonly01

+0

这是作家的角度。而且我写了一些必须计算的内容以使其触及(接下来是数学问题,而不是python)。我可以计算它,但我认为作者要求python帮助,而不是数学。 – zveryansky