美国队长的盾(一) 同心圆
时间:2022-07-22
本文章向大家介绍美国队长的盾(一) 同心圆,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
《复仇者联盟》俗称“妇联”,相信大家都看过。其中每位英雄都有自己独特的兵器或者技能。雷神的锤子,钢铁侠的盔甲,黑豹的振金战衣,鹰眼的弓箭,还有美国队长的盾。
美国队长的这块由振金和其他化学品组成的超级盾牌,几乎坚不可摧。其外表光滑,具有完美的空气动力学特征,能够保证投掷路线不会偏移。在经过长期训练的美队手中更是一个完美的投掷物,可以做到人盾合一的地步。
攻击等级:★★★☆
防御等级:★★★★
今天我们就来用python来打造这样一款神器。其实这块盾牌从几何学的角度来看,还是很规整的。四个同心圆,加一个五角星。跟它强大战斗力比起来简直弱爆了!
如果看过我们往期内容的小伙伴,画圆应该不是什么难事了。
Python之turtle模块-画圈圈
除了形状,这块盾主要包含三种颜色,红色,白色和蓝色。前面我们也讲过了,在python里面只有封闭的形状才能够填充颜色。那初步的想法就是由外而内画四个同心圆,然后填上不同的颜色。
说干就干,
import turtle
import math
# 定义一个画多线段的函数,这个函数有五个参数
# t是turtle对象,n是线段数,length为每条线段的长度
# angle每次旋转的角度,direction旋转的方向
def polyline(t, n, length, angle, direction):
# 循环n次画出n条线段
for i in range(n):
# 画边
t.fd(length)
# 判断旋转的方向
if direction == "left":
t.lt(angle)
elif direction == "right":
t.rt(angle)
# 画弧线的函数,t是turtle对象,r是弧的半径
# angle是每次旋转的角度,direction是弧旋转的方向
def arc(t, r, angle, direction):
# 根据半径计算圆的周长
circumference = 2 * math.pi * r
# 根据弧度计算弧长
arc_len = angle / 360 * circumference
# 这里设定线段长度为3,计算线段数,int强制转换成整数
n = int(arc_len / 3) + 1
# 得到整数的线段数之后,重新计算线段的长度,
# 得到的length这时可能是小数了
length = arc_len / n
# 计算每一次旋转的角度
step_angle = angle / n
# 调用前面定义的画多线段的函数来画弧线
polyline(t, n, length, step_angle, direction)
# 移动的函数,t是turtle对象, direction是移动的方向
# distance是移动的距离
def move(t, direction, distance):
# 提笔,再移动不会在画布上留下痕迹
t.pu()
# 判断移动方向,fd向前,bk向后,移动相应距离
if direction == "fd":
t.fd(distance)
elif direction == "bk":
t.bk(distance)
# 放下笔,再移动会在画布上留下痕迹
t.pd()
# 让箭头回到原点
def home(t):
t.pu()
t.home()
t.pd()
# 定义一个画圆的函数,这个函数有三个参数
# t是turtle对象,r圆的半径,color圆的填充色
def circle(t, r, color):
# 回到原点
home(t)
# 移动一个半径的距离
move(t, 'fd', r)
# 调整箭头正北
t.setheading(90)
# 设置填充色
t.begin_fill()
t.fillcolor(color)
# 画圆
arc(t, r, 360, 'left')
# 填充结束
t.end_fill()
# 定义一个画盾牌的函数
# t是turtle对象,r是最大圆的半斤
def shield(t, r):
# 计算一个合适的步长
step = r / 150 * 30
# 画第一个圆
circle(bob, r, 'red')
# 画第二个圆
circle(bob, r - step, 'white')
# 画第三个圆
circle(bob, r - 2 * step, 'red')
# 画第四个圆
circle(bob, r - 3 * step, 'blue')
bob = turtle.Turtle()
shield(bob, 100)
bob.hideturtle()
turtle.mainloop()
来看看半成品
- 网页优化系列二:使用Cache缓存静态文件、图片(asp.net版)
- Linux用户与“最小权限”原则
- WPF一步一脚印系列(1):万事起头难
- 自定义迭代器使用foreach
- 理解cookie的path和domain属性
- 静态页面设置缓存、动态页面设缓存(不断更新中。。。。)
- 区块链技术如何把你的游戏资产真正变为你的资产
- Python标准库07 信号 (signal包,部分os包)
- 当css属性width设为100%时
- GridView实战一:自定义分页、排序、修改、插入、删除
- Windows下程序打包发布时的小技巧
- Linux的“壳”
- 网页优化系列一:合并文件请求(asp.net版)
- Windows下Thumbnail的开发总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法