python - 带有 Python 乌龟的圆角矩形
问题描述
除了绘制圆形并在其上绘制正方形之外,还有另一种方法可以为方形/矩形形状添加圆角边缘吗?我正在尝试仅使用 Python 龟制作 YouTube 徽标。我没有使用 home() 之类的绝对位置函数,因为稍后我需要在不同的位置复制它。
from turtle import *
def placement():
penup()
setheading(0)
forward(5)
setheading(90)
forward(20)
setheading(0)
pendown()
def youtube():
placement() #Custom Starting poisition
hideturtle()
pencolor("#d43b33") # Pen Color
fillcolor("#d43b33") #Youtube Red Colour RGB Code
begin_fill()
forward(90)
setheading(90) #Face Up
forward(30)
setheading(180) #Face Left
forward(90)
setheading(270) #Face Down
forward(30)
end_fill()
setheading(0) #Second Half Youtube Logo
forward(90)
setheading(90)
forward(30)
pencolor("#fa453b") # Pen Color
fillcolor("#fa453b") #Youtube Ligther Red Colour RGB Code
begin_fill()
forward(30)
setheading(180) # Face Left
forward(90)
setheading(270) #Face Down
forward(30)
setheading(0) #turn right
forward(90)
end_fill()
penup()
fillcolor("#ffffff") #Youtube White Play button RGB Code
setheading(180)
forward(55)
setheading(90)
begin_fill()
forward(20)
setheading(315)
forward(30)
setheading(225)
forward(30)
setheading(90)
forward(20)
end_fill()
解决方案
首先,我不认为 YouTube 徽标是圆角矩形,而是超椭圆。但是让我们假设一个圆角矩形来保持简单。其次,我不相信你的颜色和箭头符合YouTube 品牌,所以我会稍微调整一下:
from turtle import Turtle, Screen
def rounded_rectangle(turtle, short, long, radius):
diameter = radius * 2
heading = turtle.heading()
turtle.setheading(270)
isdown = turtle.isdown()
if isdown:
turtle.penup()
turtle.goto(turtle.xcor() - long/2, turtle.ycor() - short/2 + radius)
turtle.pendown()
for _ in range(2):
turtle.circle(radius, 90)
turtle.forward(long - diameter)
turtle.circle(radius, 90)
turtle.forward(short - diameter)
turtle.penup() # restore turtle state, position and heading
turtle.goto(turtle.xcor() + long/2, turtle.ycor() + short/2 - radius)
if isdown:
turtle.pendown()
turtle.setheading(heading)
def youtube(turtle):
turtle.color("#ff0000") # YouTube red pen color RGB code
turtle.begin_fill()
rounded_rectangle(turtle, 60, 90, 10)
turtle.end_fill()
turtle.penup()
turtle.color("#ffffff") # YouTube white play button RGB code
turtle.setheading(0)
turtle.backward(8)
turtle.setheading(90)
turtle.pendown()
turtle.begin_fill()
turtle.forward(12)
for _ in range(2):
turtle.right(120)
turtle.forward(24)
turtle.right(120)
turtle.forward(12)
turtle.end_fill()
def placement(turtle):
turtle.penup()
turtle.forward(5)
turtle.left(90)
turtle.forward(20)
turtle.right(90)
turtle.pendown()
screen = Screen()
yertle = Turtle(visible=False)
placement(yertle) # Custom starting position
youtube(yertle)
screen.mainloop()
推荐阅读
- python - 在 Python 中循环列并为文件中的每一列写入输出
- java - 是否有任何功能可以在整个脚本执行过程中将 Firefox 浏览器缩放级别设置为某个特定百分比?
- ios - 如何在没有抗锯齿的情况下调整 UIImage 的大小?
- angularjs - 控制器函数未在 Angular 模块 md-data-table 中调用
- android - 几个月前用旧应用和新应用转载:Crashlytics 没有报告旧应用中的崩溃或注册我的新应用
- android - VS2017 Xamarin android模拟器启动无法连接
- angular - 从firebase存储链接获取css中的字体?
- mysql - 在mysql中分组时从状态中获取学生结果
- ios - 动画后计算uiview的高度
- php - 更新查询正在更新每个新值并从数据库中删除以前更新的值