あなたがにリンクされた画像は、二次曲線を使用していない例であるので、私は画像ではなくコードで を実行するつもりです。
ios(およびos x)の下のベジエパスは、基本的に描画コマンドとポイントのリストです。例えば:で
[path moveTo:CGMakePoint(1,1)];
[path curveToPoint:(10,10) controPoint1:(3,7) controlPoint2:(4,1)];
[path curveToPoint:(10,10) controPoint1:(15,17) controlPoint2:(21,11)];
[path closePath];
結果:ベジエ・パスに
moveto (1,1)
curveto (10,10) (3,7) (4,1)
curveto (20,0) (15,17) (21,11)
closepath
制御点が点からカーブの方向と速度を制御します。最初のコントロールポイント(cp)は、前のポイントを終了するカーブの方向と速度を制御し、2番目のコントロールポイントは、カーブしているポイントのカーブの方向とカーブを制御します。二次曲線(addQuadCurveToPoint:controlPoint:を使用した場合)については、hereのドキュメントにあるように、これらの点は同じです。
点の集合に沿って滑らかな曲線を得るには、cp1とcp2を互いに同一直線にし、その線をその線分の両端の点に平行にする必要があります。
このようなものになります。今
[path moveTo:2];
[path curveTo:3 controlPoint1:cp1 controlPoint2:cp2];
CP1とCP2は、いくつかの定数線路の長さを選択すると、いくつかの形状をしていることにより計算することができます(私はすべての私のラインの方程式を忘れるのが、彼らは」セグメント番号を指定するには# - >#を使用し、セグメントのcurveto呼び出しにはコントロールポイントを指定するには# - >#(cp#)を使用します。
次の問題は、2→3セグメントから3> 4セグメントに滑らかにカーブさせることです。コードのこの時点で、2〜3(cp2)で計算されたコントロールポイントが必要です。これから線の長さを一定にすると(曲線の鋭さが制御されます)、2> 3(cp2)で点線の線を引いて、3から4までのcp1を計算できます。次に、3> 4(cp1)と同一直線上にあり、点3と点4の形をした線に平行な3> 4(cp2)を計算します。リンスし、あなたのポイント配列を繰り返します。
沈黙はとても痛いので痛いです。 – akaru
あなたは与えられたポイントのそれぞれを正確に通り抜けたいですか?または、より滑らかな曲線が所定の点のいくつかの近くを通過することを希望しますか? –
@robmayoffもっと簡単な操作であれば、closeは十分だと思います。 – akaru