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

如何在fx-CG50计算器上借助casioplot实现2D Bézier曲线?

在fx-CG50计算器上实现2D Bézier曲线(基于casioplot库)

核心原理(适合初中知识水平)

Bézier曲线不需要微积分,核心就是线性插值——简单说就是找两个点之间的中间点。常用的是二次(3个控制点)和三次(4个控制点)曲线,足够覆盖大部分绘图需求:

二次Bézier(3个控制点P0、P1、P2)

  1. 取参数t(从0到1,代表从曲线起点到终点的进度)
  2. 先算P0到P1的插值点:A = P0*(1-t) + P1*t
  3. 再算P1到P2的插值点:B = P1*(1-t) + P2*t
  4. 最后算A到B的插值点,就是曲线上的点:C = A*(1-t) + B*t
    展开后可以直接用公式计算:
    C = P0*(1-t)² + P1*2t(1-t) + P2*t²

三次Bézier(4个控制点P0、P1、P2、P3)

多一层插值,最终公式:
C = P0*(1-t)³ + P1*3t(1-t)² + P2*3t²(1-t) + P3*t³

代码实现

先导入必备库:

from casioplot import *
import math  # 按要求保留,插值逻辑无需额外调用

二次Bézier绘制函数

def draw_quadratic_bezier(p0, p1, p2, color=(255,255,255)):
    # p0/p1/p2是(x,y)元组,代表三个控制点;color是RGB三元组
    step = 0.01  # t的步长,越小曲线越平滑,0.01在fx-CG50上速度适中
    t = 0.0
    while t <= 1.0:
        # 计算当前t对应的像素坐标
        x = p0[0] * (1-t)**2 + p1[0] * 2*t*(1-t) + p2[0] * t**2
        y = p0[1] * (1-t)**2 + p1[1] * 2*t*(1-t) + p2[1] * t**2
        # 转成整数像素位置,用round避免坐标偏移
        setpixel(int(round(x)), int(round(y)), color)
        t += step

三次Bézier绘制函数

def draw_cubic_bezier(p0, p1, p2, p3, color=(255,255,255)):
    step = 0.01
    t = 0.0
    while t <= 1.0:
        x = p0[0]*(1-t)**3 + p1[0]*3*t*(1-t)**2 + p2[0]*3*t**2*(1-t) + p3[0]*t**3
        y = p0[1]*(1-t)**3 + p1[1]*3*t*(1-t)**2 + p2[1]*3*t**2*(1-t) + p3[1]*t**3
        setpixel(int(round(x)), int(round(y)), color)
        t += step

使用示例

# 清屏
clearscreen()
# 画一条绿色的二次Bézier曲线,控制点对应屏幕上的位置
draw_quadratic_bezier((50, 200), (150, 50), (250, 200), (0,255,0))
# 画一条红色的三次Bézier曲线
draw_cubic_bezier((30, 30), (100, 180), (280, 30), (350, 180), (255,0,0))
# 必须调用showscreen才会显示所有绘制的点
showscreen()

关键注意事项

  • setpixel仅更新VRAM,所有点绘制完成后一定要调用showscreen()才能看到效果
  • fx-CG50屏幕分辨率是384x216,控制点坐标不要超出x:0-383、y:0-215范围,否则点不会显示
  • 步长step可以调整:0.01兼顾平滑度和速度,若追求更细腻的曲线可以改成0.005,但绘制时间会变长
  • 用round()转换坐标比直接强转int()更准确,能减少曲线锯齿

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:03:10