Python 如何绘制相同长度的动态线段

Python 如何绘制相同长度的动态线段,python,pygame,graphing,Python,Pygame,Graphing,我正在用pygame编写一个游戏,我需要一个函数,它接受开始(x1,y1)和结束(x2,y2)作为参数。使用pygame的画线功能,我可以像这样从一个点到下一个点画一条直线 def make_bullet_trail(x1,y1,x2,y2): pygame.draw.line(screen,(0,0,0),(x1,y1),(x2,y2)) 但是,我希望直线从x1,y1开始的长度不超过10个像素,因此如果点距离为100个像素,则不会绘制90个像素的直线。我如何动态地写这条曲线,以便无论

我正在用pygame编写一个游戏,我需要一个函数,它接受开始(x1,y1)和结束(x2,y2)作为参数。使用pygame的画线功能,我可以像这样从一个点到下一个点画一条直线

def make_bullet_trail(x1,y1,x2,y2):
    pygame.draw.line(screen,(0,0,0),(x1,y1),(x2,y2))

但是,我希望直线从x1,y1开始的长度不超过10个像素,因此如果点距离为100个像素,则不会绘制90个像素的直线。我如何动态地写这条曲线,以便无论这4个点位于何处,直线始终从一个点开始绘制到另一个点,并在十个像素后停止?

在调用直线绘制功能之前,您可以调整(x2,y2)点。您可能希望执行以下操作:

# Get the total length of the line
start_len = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

# The desired length of the line is a maximum of 10
final_len = min(start_len, 10)

# figure out how much of the line you want to draw as a fraction
ratio = 1.0 * final_len / start_len

# Adjust your second point
x2 = x1 + (x2 - x1) * ratio
y2 = y1 + (y2 - y1) * ratio
但是,由于您使用的是pygame,因此可能需要整数像素。在这种情况下,您可能希望对输出x2和y2采用
int(round())
,并且还希望调整比率,以便在主(最长)方向上精确获得10个像素。要进行此调整,只需使用
max(abs(x2-x1)、abs(y2-y1))
作为长度。它不是真正的长度,但可以确保每次绘制的像素数相同