閉じた均一な3次Bスプラインの制御頂点(Dx)である2D点のリストがあります。私は単純な曲線を想定しています(非自己交差、すべての制御点は別個のものです)。
曲線で囲まれた領域を見つけようとしています。
結び点(Px)を計算すると、曲線を多角形として扱うことができます。次に、実際の曲線と結び点を結ぶ直線の間の、各セグメントの残りのデルタ領域を「ただ」見つける必要があります。
Bsplineの形状(したがって面積)は回転と平行移動の下で不変であることを理解しています-したがって、各セグメントについて、原点にt = 0ノットを配置するための平行移動と、t=1ノットを配置するための回転を見つけることができます+ x軸上:
ポイントを接続して再グループ化することで、曲線の方程式を見つけることができます。
P(t) = (
(t**3)*(-Dm1 + 3*D0 - 3*D1 + D2)
+ (t**2)*(3*Dm1 - 6*D0 + 3*D1)
+ t*(-3*Dm1 + 3*D1)
+ (Dm1 + 4*D0 + D1)
) / 6.
しかし、私はそれを統合しようとして髪を引き裂いています-私はできます
1
/
| Py(t) dt
/
t=0
しかし、それは私に領域を与えません。必要なのは
Px(t=1)
/
| Py(t) (dPx(t) / dt) dt
/
x = Px(t=0)
しかし、先に進む前に、私は本当に知りたいです:
これは面積の正しい計算ですか?理想的には、分析ソリューションが私の一日になります!
この領域を見つけたら、ベースポリゴン(最初の図の赤と緑の領域)に加算または減算する必要があるかどうかをどのように判断できますか?
この計算を行うPythonモジュールはありますか?Numpyには、3次Bスプラインを評価するためのいくつかの方法がありますが、面積を処理する方法はないようです。
これを行う簡単な方法はありますか?
t = numpy.arange(0.0, 1.0, 0.05)
たぶん、P(t)をたくさんのポイント(のようなもの)で評価し、全体をポリゴンとして扱うことを考えています。与えられたレベルの精度を保証するためにいくつの細分化が必要かという考えはありますか(エラー<1%が欲しい)?