首页 > 解决方案 > 如何计算给定 t 处贝塞尔曲线的斜率/导数?

问题描述

DEFAULT_CONTROL_POINTS = [(0, 0), (0, 0), (0, 0)]

def factorial(n):
    result = 1
    while n > 1:
        result *= n
        n -= 1
    return result
    
def binomial_coefficient(n, k):
    return factorial(n) / (factorial(k) * factorial(n - k))


class BezierCurve(Curve):

    def __init__(self, control_points=None):
        if control_points is None:
            control_points = DEFAULT_CONTROL_POINTS

        self.control_points = control_points

    def get_order(self):
        return len(self.control_points) - 1

    def B(self, n, k, t):
        result = binomial_coefficient(n, k)
        result *= (1 - t) ** k
        result *= t ** (n - k)
        return result

    def calculate_point_multiplier(self, t):
        res_x = 0
        res_y = 0

        n = self.get_order()
        for k in range(n + 1):
            point = self.control_points[k]
            multiplier = B(n, k, t)
            res_x += point[0] * multiplier
            res_y += point[1] * multiplier

        return res_x, res_y

    def calculate_point_at(self, t):
        return self.calculate_point_multiplier(t, self.B)

    def calculate_slope_at(self, t):
        pass

在这里,在方法calculate_slope_at中,我需要能够确定给定点处曲线的斜率t

我需要这个,以便我可以在曲线上移动对象并让它们在沿着曲线移动时朝向正确的方向。

我在这里需要一个值,即给定的切线斜率t

标签: pythongraphicsbeziercurvecalculus

解决方案


推荐阅读