Processing

PythonでProcessing bezierTangent() ベジェ曲線の接線を取得

ベジェ曲線上の点の接線を計算する。接線(タンジェント)の詳細は、Wikipediaを参照。

# 構文
# bezierTangent(a, b, c, d, t)
#
# パラメータ
# a float: 曲線上の最初の点の座標
# b float: 1番目の制御点の座標
# c float: 2番目の制御点の座標
# d float: 曲線上の2番目の点の座標
# t float: 0と1の間の値
noFill()
bezier(85, 20, 10, 10, 90, 90, 15, 80)
steps = 6
fill(255)
for i in range(steps + 1): 
    t = i / float(steps)
    # ポイントの位置を取得
    x = bezierPoint(85, 10, 90, 15, t)
    y = bezierPoint(20, 10, 90, 80, t)
    # タンジェントポイントの取得
    tx = bezierTangent(85, 10, 90, 15, t)
    ty = bezierTangent(20, 10, 90, 80, t)
    # 接地点からの角度を算出
    a = atan2(ty, tx)
    a += PI
    stroke(255, 102, 0)
    line(x, y, cos(a)*30 + x, sin(a)*30 + y)
    stroke(0)
    ellipse(x, y, 5, 5)