ベジェ曲線の次数が高いほど、より多くの制御点が必要になります。二次曲線は二次ベジエ曲線であり、単一の制御点が必要です。2 つの制御点を持つベジエ曲線は 3 次です。次数 1 のベジェ曲線は実質的に直線です。ベジエ曲線の順序が有限であっても、完全な円弧を作成することはできません。
ちなみに、二次曲線は「楕円とか」ではなく、放物線です。
円弧が必要な場合は、円弧を使用する必要があります。それを制御するには、半径を変更する必要があります。実際には、円の中心を移動することでそれを行うことができます。
円弧は決して直線ではないため、直線を処理するには追加のロジックが必要になります。したがって、ドラッグ ポイントが直線上にある場合は線を描画し、そうでない場合は適切な半径で円弧を描画します。
したがって、次のような状況があるとします。

セグメントab
は、長方形の直線でacb
あり、目的の円弧です。y
はセグメントの高さでx
、ドラッグの水平オフセットです。との 3 点でr
定義される円の半径を探しています。a
c
b
これで、角度sda
は 1 回転/4 になり、sd
はになり、 はr - x
になりad
ますy / 2
。ピタゴラスを使用すると、次のようになります。
r^2 = (r-x)^2 + (y/2)^2
=>
r^2 = (r-x)(r-x) + (y/2)^2
=>
r^2 = r^2 - 2rx + x^2 + (y/2)^2
=>
r^2 = r^2 - 2rx + x^2 + (y^2/4)
=>
0 = - 2rx + x^2 + (y^2/4)
=>
2rx = x^2 + (y^2/4)
=>
r = (x^2 + (y^2/4)) / 2x
=>
r = ((x^2) / 2x) + ((y^2/4) / 2x)
=>
r = (x/2) + ((y^2/4) / 2x)
=>
r = (x/2) + (y^2/8x)
ご覧のとおり、 is 0 の場合x
は 0 による除算になります。そのため、このような場合は直線の描画に切り替える必要があります。
見つかった式 ( r = (x/2) + (y^2/8x)
) を使用すると、円弧を描くための円の半径を決定できます。中心点を見つけるのは簡単です...
角度を見つけるには、サインの法則またはコサインの法則のいずれかを好みに応じて使用できますが、どちらもうまく機能します。三角形asb
、三角形、asd
または三角形adc
(緑色) を使用して角度を見つけることができます。
簡単なアプローチとして、三角形asd
を続けて、サインの法則を使用しましょう。
r / sin(turn/4) = (y/2) / sin(θ/2)
1/4 回転の正弦は 1 なので、次のように置き換えることができます。
=>
r / 1 = (y/2) / sin(θ/2)
=>
1 = (y/2) / sin(θ/2)
次に、角度について解きます。
=>
sin(θ/2) = (y/2)
=>
θ/2 = asin(y/2)
円弧を描く関数を呼び出すと、開始角度は -θ/2 になり、終了角度は θ/2 になります。
注: これはすべて、長方形の右側に対して行われたもので、他の側では調整が必要になります。