私は最適化パラメータの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)
(:
実装した関数は、パラメトリック平面カーブの実際の曲率半径と一致していないようです。 –
@ Mike'Pomax'Kamermansええ、これは私が考えていたことです、私が働いていた論文はこの機能を使っていました。 – BlueSpud