gpt4 book ai didi

python - 如何对这个形状进行分割?

转载 作者:行者123 更新时间:2023-11-28 22:11:25 26 4
gpt4 key购买 nike

我正在尝试分割以下形状,如下图所示。 (我没有足够的声誉来发布图像,所以就在这里。我正在使用 python turtle 图形来尝试让每个形状相互配合,但我不知道如何或何时重新开始。

我已经做好了形状,如下所示。

import turtle

t = turtle.Turtle()
t.left(30)
t.speed("fastest")
turtle.delay(0)
counter = 0
t.begin_fill()
def setup(length):
t.forward(length)
t.right(120)
t.forward(length / 3)
t.left(60)
t.forward(length / 3)
t.left(120)
t.forward(length)
t.left(60)
t.forward(length)
t.left(120)
t.forward(length / 3)
t.left(60)
t.forward(length / 3)
t.right(120)
t.forward(length)
t.right(60)

while True:
setup(100)

我不知道从这里到哪里去,现在的代码只是制作基本形状。

最佳答案

这是思考这个问题的另一种方式。许多镶嵌图案是简单几何瓷砖的变形。这个可以被认为是一个变形的六边形:

enter image description here

因此,如果我们编写代码用六边形平铺平面,那么我们应该能够使用相同的代码用此形状平铺它。基于图章的六边形平铺程序:

from turtle import Screen, Turtle
from math import pi, sin, cos

SIDES = 6
OUTER_RADIUS = 90
INNER_RADIUS = 3**0.5 * OUTER_RADIUS / 2

def tessellation(depth):
turtle.stamp()

if depth:
angle = 0

while angle < 2 * pi:

position = turtle.position()

x = 2 * INNER_RADIUS * cos(angle)
y = 2 * INNER_RADIUS * sin(angle)

turtle.goto(turtle.xcor() + x, turtle.ycor() + y)
tessellation(depth - 1)

turtle.setposition(position)

angle += 2 * pi / SIDES

screen = Screen()

turtle = Turtle(visible=False)
turtle.penup()
turtle.sety(-OUTER_RADIUS) # center point correction!
turtle.begin_poly()
turtle.circle(OUTER_RADIUS, steps=6)
turtle.end_poly()

screen.register_shape('tile', turtle.get_poly())

turtle.shape('tile')
turtle.settiltangle(30) # orient tile
turtle.fillcolor('white')
turtle.home()
turtle.showturtle()

screen.tracer(False) # because I have no patience
tessellation(2)
screen.tracer(True)

screen.exitonclick()

enter image description here

替换 OP 设计的一个问题是原点不在中心:

enter image description here

但是我们会在上面贴上创可贴,而不是修复绘图代码。让我们修改上面的代码以使用OP的代码来绘制图形:

from turtle import Screen, Turtle
from math import pi, sin, cos

SIDES = 6
OUTER_RADIUS = 90
INNER_RADIUS = 3**0.5 * OUTER_RADIUS / 2

def setup(length):
turtle.forward(length)
turtle.right(120)
turtle.forward(length / 3)
turtle.left(60)
turtle.forward(length / 3)
turtle.left(120)
turtle.forward(length)
turtle.left(60)
turtle.forward(length)
turtle.left(120)
turtle.forward(length / 3)
turtle.left(60)
turtle.forward(length / 3)
turtle.right(120)
turtle.forward(length)
turtle.right(60)

def figure(length):
for _ in range(3):
setup(length)

def tessellation(depth):
turtle.stamp()

if depth:
angle = 0

while angle < 2 * pi:

position = turtle.position()

x = 2 * INNER_RADIUS * cos(angle)
y = 2 * INNER_RADIUS * sin(angle)

turtle.goto(turtle.xcor() + x, turtle.ycor() + y)
tessellation(depth - 1)

turtle.setposition(position)

angle += 2 * pi / SIDES

screen = Screen()

turtle = Turtle(visible=False)
turtle.penup()
turtle.goto(OUTER_RADIUS / 9, -2 * OUTER_RADIUS / 9) # center point correction!
turtle.begin_poly()
figure(INNER_RADIUS)
turtle.end_poly()

screen.register_shape('tile', turtle.get_poly())

turtle.shape('tile')
turtle.settiltangle(30) # orient tile
turtle.fillcolor('white')
turtle.home()
turtle.showturtle()

screen.tracer(False) # because I have no patience
tessellation(2)
screen.tracer(True)

screen.exitonclick()

这为我们提供了修改后的六边形镶嵌:

enter image description here

关于python - 如何对这个形状进行分割?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55719351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com