在写一个小游戏过程中,打算做一个饼状旋转的动画,于是打算用 Python 来生成这个动画,假设我们有这样一张图片
最后生成的动画是这个样子的
当然,中间会生成很多帧的动画
怎么去生成每一帧动画呢?其实关键就在于挖去一个饼状图形里面的像素
那我们只要遍历这张图片的所有元素,然后挖去在这个饼状范围内的像素即可,从这个思路出发,我们可以很容易想到使用极坐标。假设我们有两条极坐标空间里面的直线 p = Theta1
和 p = Theta2
那我们只要把这两条直线中间的像素挖掉即可。当我们遍历所有元素的时候,我们需要判断这个像素点在极坐标空间中的位置。当然,我们坐标的圆心是整个图片的中心,所以对于每个像素点,我们要减去整张图片中点坐标,求出的相对坐标再作 atan2 计算。
用 math.atan2 求出 theta 之后若在 theta1 和 theta2 之内,则删去即可,所以说核心代码其实很简单:
for x in range(SIZE[0]):
for y in range(SIZE[1]):
relative_point = (x - CENTER_POINT[0], y - CENTER_POINT[1])
theta = math.atan2(relative_point[1], relative_point[0])
theta = theta * 180 / math.pi + 180
if theta >= theta1 and theta < theta2:
draw = ImageDraw.Draw(img, 'RGBA')
draw.point([x, y], (0, 0, 0, 0)) # write null pixel
最后附上源码 gist 地址: https://gist.github.com/vincentdchan/e120f3cacf88efbba3e51fa1b0084086