2017-10-16 41 views
0

私は最適化パラメータの1つとして曲率を持つ遺伝的アルゴリズムを書こうとしています。私は、ベジェ曲線の制御点に基づいて曲率を計算したいと思います。私は最適化したい最小曲率半径を持っています。私はこの論文を参照しています:https://arxiv.org/pdf/1503.01524.pdf制御点が与えられたときのベジェ曲線の曲率半径の計算

この論文では、私が実装した暗黙の曲率半径を得るために三角形の辺の長さをとる関数があります。ここに私の現在のコードはあります:

// Computes the curvature implied by 3 control points of a bezier curve 
float curvature(float4 p0, float4 p1, float4 p2) { 

    // Get the triangle side lengths 
    float a = distance(p0, p1); 
    float b = distance(p1, p2); 
    float c = distance(p2, p0); 

    // Do the curvature calculation 
    float num = a * b * c; 
    float denom = (a + b + c) * (b + c - a) * (a - b + c) * (a + b - c); 

    return num/sqrt(denom); 

} 

この機能の結果は間違っているようです。私は、パスのすべてのポイントに対してこの関数を実行し、最後の2つを保存してから、それらのすべてから最小半径を取得します。私がパスをグラフ化すると、この関数の計算と視覚的に見ることの間に大きな相違があるようです。これを行う正しい方法は何ですか?

EDIT: 私は3つのコントロールポイント間の曲率半径を計算したいと思っていました。カーブの特定のポイントではなく、謝罪していました。

  x'y" - y'x" 
κ(t) = -------------------- 
     (x'² + y'²)^(3/2) 

(:

+1

実装した関数は、パラメトリック平面カーブの実際の曲率半径と一致していないようです。 –

+0

@ Mike'Pomax'Kamermansええ、これは私が考えていたことです、私が働いていた論文はこの機能を使っていました。 – BlueSpud

答えて

1

曲率R(t)の半径は、κ(t)はa parametric planar curveするためのものである点tでの曲線の曲率は1 /κ(T)に等しいです。 ^(3/2)は実際には3/2ですが、コードブロックでは上付き文字の書式設定にhtmlを使用できません。また、(t)部分はxとyの関数から除外されているため、読み込みが不必要に困難になるため)

したがって、コントロールP1、P2、およびP3を使用する2次ベジエ曲線の場合、the first and second derivatives use the following control points:XおよびYのためにこれらの評価

B(t)': P₁' = 2(P₁ - P₂), and P₂' = 2(P₂ - P₃) 
B(t)": P₁" = (P'₁ - P'₂) 

は文字通りので、 "xまたはy座標を使用して、" 次のとおり

x' = Px₁'(t-1) + Px₂'(t) 
y' = Py₁'(t-1) + Py₂'(t) 
x" = Px₁" 
y" = Py₁" 

がXことを指摘 "及びy" だけ定数です。分母がゼロでない(もちろん、曲率半径のない線分を示している)場合、これらの値をκ(t)の関数に代入し、R(t)が何であるかを知る逆の値だけです。

最後に、円弧で曲線のセクションを近似するだけの場合、https://pomax.github.io/bezierinfo/#arcapproximationはその特定のユースケースの「方法」をカバーする必要があります。

+0

質問で私が探していたものが少し不明で、謝罪しました。私は曲線上の任意の点で曲率を評価するのではなく、曲面に3点の曲率半径を与える方法をもっと探していました。 – BlueSpud

+1

Bezier曲線の円弧の半径は「ある点で」ではなく、「ある間隔で」計算することができます。実際には曲線の部分を円形に近似する方法が必要ですアーク。その場合は、https://pomax.github.io/bezierinfo/#arcapproximationに記載されています。 –

関連する問題