手记

Bezier项目实战:新手入门教程

概述

本文将详细介绍Bezier曲线的基本概念、数学基础及其在动画制作、图形设计和游戏开发中的实际应用场景。文章不仅提供了详细的代码示例和实战案例,还通过解析操作步骤帮助读者深入理解Bezier曲线的应用和调整方法。

Bezier曲线简介
Bezier曲线的基本概念

Bezier曲线是一种广泛应用于计算机图形学中的参数曲线。它由法国工程师Pierre Bézier在20世纪60年代开发,用于汽车工业中的设计。Bezier曲线通过一组控制点定义曲线的形状和方向。Bezier曲线的一个重要特性是,它能够在保持连续性和平滑度的同时,灵活地修改曲线的形状。

Bezier曲线是通过插值方法生成的,最常用的方法是使用de Casteljau算法。这个算法使用递归或迭代的方式计算出任意参数值下的曲线点。Bezier曲线的阶数(即控制点的数量减一)决定了它的阶次,最常见的是一次(直线)、二次(抛物线)和三次(更复杂的曲线)。

示例代码

以下是一个简单的三次Bezier曲线的定义和计算方法:

def bezier(t, p0, p1, p2, p3):
    t = float(t)
    t1 = 1.0 - t
    return (t1 * t1 * t1 * p0 +
            3 * t1 * t1 * t * p1 +
            3 * t1 * t * t * p2 +
            t * t * t * p3)
Bezier曲线的实际应用场景

Bezier曲线在计算机图形学中有着广泛的应用,包括但不限于以下方面:

  • 图形设计:Adobe Illustrator、CorelDRAW等图形设计软件中,Bezier曲线被广泛用于形状的创建和编辑。
  • 动画制作:在动画制作中,Bezier曲线常用于控制动画的关键帧,使得动画能够更加流畅和自然。
  • 游戏开发:在游戏开发中,Bezier曲线可以用来定义角色的运动轨迹,使游戏中的物体运动更加自然。

示例代码

以下是一个使用Python绘制Bezier曲线的例子:

import numpy as np
import matplotlib.pyplot as plt

def bezier(t, p0, p1, p2, p3):
    t = float(t)
    t1 = 1.0 - t
    return (t1 * t1 * t1 * p0 +
            3 * t1 * t1 * t * p1 +
            3 * t1 * t * t * p2 +
            t * t * t * p3)

def draw_bezier_curve(p0, p1, p2, p3):
    t_values = np.linspace(0, 1, 1000)
    points = [bezier(t, p0, p1, p2, p3) for t in t_values]
    x_values, y_values = zip(*points)
    plt.plot(x_values, y_values)
    plt.scatter([p0[0], p1[0], p2[0], p3[0]], [p0[1], p1[1], p2[1], p3[1]], color='red')
    plt.show()

p0 = (0, 0)
p1 = (0.5, 1)
p2 = (1, 0.5)
p3 = (1, 1)
draw_bezier_curve(p0, p1, p2, p3)
Bezier曲线的数学基础

Bezier曲线的数学基础主要涉及线性代数和多项式插值。一个n阶Bezier曲线可以表示为n+1个控制点的线性组合。具体的,对于一个三次Bezier曲线(也就是三次多项式),可以表示为:

[ B(t) = (1-t)^3 P_0 + 3(1-t)^2t P_1 + 3(1-t)t^2 P_2 + t^3 P_3 ]

其中,( P_0, P_1, P_2, P_3 ) 是控制点,( t ) 是参数,取值范围为[0, 1]。

示例代码

以下是一个使用Python计算Bezier曲线点的代码:

def bezier_curve(n, points, t):
    """
    计算Bezier曲线上的点
    :param n: 控制点的数量减1
    :param points: 控制点列表
    :param t: 参数t
    :return: 曲线上的点
    """
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
t = 0.5
print(bezier_curve(3, points, t))
Bezier曲线的绘制方法
使用代码绘制Bezier曲线

绘制Bezier曲线的方法有很多种,可以使用Python的matplotlib库、Java的JavaFX库等。这些方法的基本步骤是:

  1. 定义控制点。
  2. 计算给定参数t的曲线点。
  3. 绘制曲线点。

示例代码

以下是一个使用Python的matplotlib绘制Bezier曲线的例子:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)
常用的绘图工具介绍

常用的绘图工具包括:

  • matplotlib:Python中的一个非常流行的绘图库,可以用来绘制各种类型的图表。
  • JavaFX:Java中的一个图形用户界面工具包,可以用来绘制和处理图形。
  • Processing:一个由Java语言开发的开源编程环境,可以用来绘制和处理图形。

这些工具都有丰富的API和文档支持,可以非常方便地绘制Bezier曲线。

示例代码

以下是一个使用Processing绘制Bezier曲线的例子:

void setup() {
  size(400, 400);
  noFill();
  bezier(50, 50, 250, 300, 300, 50, 350, 200);
}

void draw() {
}
绘制过程中的常见问题及解决方法

绘制Bezier曲线时,可能会遇到以下问题:

  • 曲线不平滑:这可能是由于使用了较少的点来绘制曲线,可以通过增加点的数量来解决。
  • 曲线偏离控制点:这可能是由于使用的控制点数量较少,或者控制点的位置不合理,可以通过调整控制点的位置来解决。

解决方法

  • 增加点的数量:增加曲线上的点的数量可以使得曲线更加平滑。
  • 调整控制点的位置:调整控制点的位置可以使曲线更接近预期的形状。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,通过增加点的数量来提高曲线的平滑度:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)
Bezier曲线在项目中的应用
Bezier曲线在动画中的应用实例

在动画制作中,Bezier曲线常用于控制动画的关键帧,使得动画能够更加流畅和自然。例如,在制作角色行走或奔跑时,可以使用Bezier曲线来定义角色的运动轨迹。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,用于模拟角色行走动画:

import numpy as np
import matplotlib.pyplot as plt
import time

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

def animate_bezier_curve(points):
    t_values = np.linspace(0, 1, 100)
    for t in t_values:
        points_values = [bezier_curve(t, points)]
        x_values, y_values = zip(*points_values)
        plt.plot(x_values, y_values, 'bo')
        plt.pause(0.01)
        plt.clf()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
animate_bezier_curve(points)
Bezier曲线在图形设计中的应用实例

在图形设计中,Bezier曲线被广泛用于形状的创建和编辑。例如,在Adobe Illustrator中,用户可以使用Bezier曲线来绘制复杂的形状。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,用于创建复杂的形状:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)
Bezier曲线在游戏开发中的应用实例

在游戏开发中,Bezier曲线可以用来定义角色的运动轨迹,使游戏中的物体运动更加自然。例如,在制作赛车游戏时,可以使用Bezier曲线来定义赛车的运动轨迹。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,用于创建赛车游戏中的运动轨迹:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)
Bezier曲线的基本操作
控制点的调整

通过调整控制点的位置,可以改变Bezier曲线的形状。例如,增加或减少控制点的数量,或者移动现有的控制点。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,通过调整控制点的位置来改变曲线的形状:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)

# 调整控制点的位置
points[1] = (0.6, 1)
points[2] = (0.4, 0.5)
draw_bezier_curve(points)
曲线平滑度的调整

通过调整控制点的数量,可以改变Bezier曲线的平滑度。例如,增加控制点的数量可以使曲线更加平滑。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,通过增加控制点的数量来提高曲线的平滑度:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)

# 增加控制点的数量
points.append((0.7, 0.8))
points.append((0.8, 0.9))
draw_bezier_curve(points)
曲线方向的调整

通过调整控制点的方向,可以改变Bezier曲线的方向。例如,可以将控制点的顺序倒过来,使曲线的方向反转。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,通过调整控制点的方向来改变曲线的方向:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)

# 调整控制点的方向
points.reverse()
draw_bezier_curve(points)
Bezier项目实战案例
实战案例背景介绍

一个典型的Bezier曲线项目实战案例是制作一个简单的动画。在这个案例中,我们将使用Bezier曲线来模拟一个物体的运动轨迹。

实战案例的操作步骤
  1. 定义控制点:定义Bezier曲线的控制点。
  2. 计算曲线上的点:计算给定参数t的曲线上的点。
  3. 绘制曲线:绘制Bezier曲线。
  4. 模拟动画:模拟物体沿Bezier曲线运动的动画。

示例代码

以下是一个使用Python绘制Bezier曲线并模拟物体沿曲线运动的代码:

import numpy as np
import matplotlib.pyplot as plt
import time

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

def animate_bezier_curve(points):
    t_values = np.linspace(0, 1, 100)
    for t in t_values:
        points_values = [bezier_curve(t, points)]
        x_values, y_values = zip(*points_values)
        plt.plot(x_values, y_values, 'bo')
        plt.pause(0.01)
        plt.clf()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
animate_bezier_curve(points)
实战案例的代码解析

在上述代码中,我们首先定义了一个bezier_curve函数来计算给定参数t的曲线上的点。然后,我们通过animate_bezier_curve函数来模拟物体沿Bezier曲线运动的动画。在动画中,我们使用plt.plot函数来绘制曲线上的点,并使用plt.pause函数来实现动画效果。

示例代码

以下是一个使用Python绘制Bezier曲线并模拟物体沿曲线运动的完整代码:

import numpy as np
import matplotlib.pyplot as plt
import time

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

def animate_bezier_curve(points):
    t_values = np.linspace(0, 1, 100)
    for t in t_values:
        points_values = [bezier_curve(t, points)]
        x_values, y_values = zip(*points_values)
        plt.plot(x_values, y_values, 'bo')
        plt.pause(0.01)
        plt.clf()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
animate_bezier_curve(points)
Bezier曲线的学习资源推荐
在线教程和文档推荐
  • 慕课网:提供高质量的在线编程课程,包括Bezier曲线的讲解和应用。
  • 官方文档:查阅相关的官方文档,了解Bezier曲线的详细数学原理和实现方法。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,可以从慕课网获取更多教程和资源:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)
书籍推荐
  • 《计算机图形学基础》:这本书详细介绍了Bezier曲线的数学原理和实现方法。
  • 《图形学原理与实践》:这本书介绍了Bezier曲线在计算机图形学中的应用。
论坛和社区推荐
  • Stack Overflow:提供大量的编程问题解答和讨论,包括Bezier曲线的相关问题。
  • GitHub:可以在GitHub上找到许多关于Bezier曲线的开源项目和代码示例。

示例代码

以下是一个使用Python绘制Bezier曲线的例子,可以在Stack Overflow和GitHub上找到更多的代码示例:

import numpy as np
import matplotlib.pyplot as plt

def bezier_curve(t, points):
    """
    计算Bezier曲线上的点
    :param t: 参数t
    :param points: 控制点列表
    :return: 曲线上的点
    """
    n = len(points) - 1
    t = float(t)
    binomials = [comb(n, i) for i in range(n+1)]
    bezier_point = [binomials[i] * (t ** i) * ((1 - t) ** (n - i)) * points[i] for i in range(n+1)]
    return sum(bezier_point)

def comb(n, k):
    """
    计算组合数C(n, k)
    :param n: 总数
    :param k: 选择的数
    :return: 组合数
    """
    if k > n:
        return 0
    result = 1
    for i in range(k):
        result *= (n - i)
        result //= (i + 1)
    return result

def draw_bezier_curve(points):
    t_values = np.linspace(0, 1, 1000)
    points_values = [bezier_curve(t, points) for t in t_values]
    x_values, y_values = zip(*points_values)
    plt.plot(x_values, y_values)
    plt.scatter([p[0] for p in points], [p[1] for p in points], color='red')
    plt.show()

points = [(0, 0), (0.5, 1), (1, 0.5), (1, 1)]
draw_bezier_curve(points)
0人推荐
随时随地看视频
慕课网APP