You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyGame库绘制贝塞尔曲线(Bezier Curve)时终点不符合预期

问题原因
  • 漏导入pygame依赖,原代码没有写import pygame语句,直接调用pygame.init()会触发报错
  • 二阶贝塞尔曲线计算公式错误,控制点p1的系数项遗漏了参数t,正确的二阶贝塞尔公式为:
    B(t) = (1-t)²p0 + 2t(1-t)p1 + t²p2, t∈[0,1]
  • 参数t的迭代逻辑和循环次数不匹配,你用np.arange(0,1,0.001)会执行1000次循环,每次t加0.01的话,循环结束时t会达到10,远超出贝塞尔参数的合法取值范围[0,1],自然无法落在终点p2的位置
  • 没有添加清屏逻辑,多次渲染的曲线会重叠在画布上
修正后可运行代码
import pygame
from pygame.locals import *
from sys import exit
import numpy as np

pygame.init()

x = 1200
y = 600
screen = pygame.display.set_mode((x,y))

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()
    # 每次刷新清屏
    screen.fill((0,0,0))
    p0 = 30,30
    p1 = 60,15
    p2 = 30,90
    t = 0
    # 步长和t增量保持一致
    for i in np.arange(0,1,0.001):
            px = p0[0]*(1-t)**2 + 2*(1-t)*t*p1[0] + p2[0]*t**2
            py = p0[1]*(1-t)**2 + 2*(1-t)*t*p1[1] + p2[1]*t**2
            t = t + 0.001        
            pygame.draw.rect(screen,(255,0,0), (px,py,1,1))
    pygame.display.update()

内容的提问来源于stack exchange,提问作者skai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:06:03