UIBezierPathを分割して2つの異なるオブジェクトに格納する方法

私はアプリケーションにUIBezierPathを持っています。パス上の指のタッチが認識されたら、私はそのカーブを細分し、その2つのカーブを2つの異なるオブジェクトに格納したいと思います。したがって、タッチ座標は1つの曲線の終点と2番目の曲線の始点として機能します。

この曲線のどれかに触れると、その曲線は2つの他の曲線に細分されます。

私はこれをたくさん探しました。しかし、良い解決策を見つけることができませんでした。

また、これを行う方法が他にあるかどうかわかりません。どんな助けでも大歓迎です。 ありがとう

7
私は1つのリンクを見つけました。この男を見てください。ベジェ曲線を細分するのに役立つと思います。ジニー-meca.ac-aix-marseille.fr/Productique/PDF/…
追加された 著者 Harsh,
これは参考になるかもしれませんが、UIBezierPathを個々のパスに分解する方法を示しています: stackoverflow.com/questions/3051760/…
追加された 著者 titaniumdecoy,

1 答え

これを行うには、 de Casteljau アルゴリズムを使用します。あなたが本当にそれの数学に入っているなら、ウィキペディアのページをチェックしてください。それは実際には非常に単純なときにそれはおそらく何よりもあなたを混乱させる数学にはありません...

  1. Calculate the parameterized value along the curve (between 0.0 and 1.0) of the touch. To do this you can calculate a set of points at regular intervals (0.1, 0.2, 0.3 etc.) and then find the two closest points to your touch points and repeat the parameterization between these points if you want more accuracy (0.21, 0.22, 0.23, etc.). This will result in a number between 0.0 and 1.0 along the curve segment representing where you touched.
  2. This bit is difficult to explain in text, but there's a good visualization on this page about half-way down under the heading Subdividing a Bezier curve. Use the slider under the diagram to see how it works, here's my textual explanation: You need to subdivide the straight lines between the control points of your curve segment proportional to the parameterized value you calculated in step 1. So if you calculated 0.4, you have four points (A, B, C, D) plus the split-point on the curve closest to your touch at 0.4 along the curve, we'll call this split-point point S:
    • Calculate a temporary point T which is 0.4 along the line B→C
    • Let point A1 be equal to point A
    • Calculate point B1 which is 0.4 along the line A→B
    • Calculate point C1 which is 0.4 along the line B1→T
    • Let point D1 be equal to the split point S
    • Let point D2 be equal to point D
    • Calculate point C2 which is 0.4 along the line C→D
    • Calculate point B2 which is 0.4 along the line T→C2
    • Let point A2 be equal to the split point S

2つの新しいベジェ曲線があります。最初は制御点A1、B1、C1、D1を使用し、2番目の曲線はA2、B2、C2、D2を使用します。

1
追加された