如何解决如何用pygame绘制虚线曲线?
我需要在与 this 图片完全相同的坐标系上绘制正弦波和余弦波。除了我没有用 pygame 表示虚线和曲线之外,我把所有的工作都做得很好。我有一些类似于我需要的东西,但我怎样才能让它弯曲?或者我如何改进它以使其像 pygame.draw.lines,而不是 pygame.draw.line?
alias mongod="/c/Program\ Files/MongoDB/server/4.4/bin/mongod.exe"
alias mongo="/c/Program\ Files/MongoDB/server/4.4/bin/mongo.exe"
解决方法
编写一个函数,其操作与 pygame.draw.line()
类似,但绘制一条虚线。该函数有一个额外的参数 prev_line_len
,它指示线段在连续曲线内的位置。计算点之间的 Euclidean distance 和从线段起点指向其终点的 Unit vector。沿线分布笔画:
def draw_dashed_line(surf,color,p1,p2,prev_line_len,dash_length=8):
dx,dy = p2[0]-p1[0],p2[1]-p1[1]
if dx == 0 and dy == 0:
return
dist = math.hypot(dx,dy)
dx /= dist
dy /= dist
step = dash_length*2
start = (int(prev_line_len) // step) * step
end = (int(prev_line_len + dist) // step + 1) * step
for i in range(start,end,dash_length*2):
s = max(0,start - prev_line_len)
e = min(start - prev_line_len + dash_length,dist)
if s < e:
ps = p1[0] + dx * s,p1[1] + dy * s
pe = p1[0] + dx * e,p1[1] + dy * e
pygame.draw.line(surf,pe,ps
编写另一个函数,其行为类似于 pygame.draw.lines()
,但使用前一个函数 (draw_dashed_line
) 绘制虚线曲线。计算曲线起点到每条线段起点的长度,并传递给函数:
def draw_dashed_lines(surf,points,dash_length=8):
line_len = 0
for i in range(1,len(points)):
p1,p2 = points[i-1],points[i]
dist = math.hypot(p2[0]-p1[0],p2[1]-p1[1])
draw_dashed_line(surf,line_len,dash_length)
line_len += dist
最小示例:
import pygame
import math
def draw_dashed_line(surf,ps)
def draw_dashed_lines(surf,dash_length)
line_len += dist
pygame.init()
screen = pygame.display.set_mode((400,300))
done = False
line = [(i,150 + math.sin(math.radians(i*2)) * 100) for i in range(400)]
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
draw_dashed_lines(screen,(255,255,255),line)
pygame.display.flip()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。