2011-12-19 22 views
7

我在應用程序中有UIBezierPath。當手指觸摸路徑被識別時,我想細分該曲線並將這兩條曲線存儲到兩個不同的對象中。所以觸摸座標將作爲一條曲線的終點和第二條曲線的起點。如何細分UIBezierPath並將其存儲在兩個不同的對象中

再次,如果我觸及這條曲線的任何一條曲線,那條曲線將細分爲另外兩條曲線,等等。

我搜索了很多。但找不到任何好的解決方案。

此外,我不知道是否有任何其他方式來做到這一點。任何幫助將不勝感激。 感謝

+0

我找到了一個鏈接。看看這個傢伙。我認爲它可以幫助我細分beziercurve.http://www.genie-meca.ac-aix-marseille.fr/Productique/PDF/361_deCasteljau_john。pdf – Harsh 2011-12-27 06:47:01

+2

這可能會或可能不會有幫助,但會向您展示如何將UIBezierPath分解爲各個路徑:http://stackoverflow.com/questions/3051760/getting-a-list-of-points-from-a-uibezierpath – titaniumdecoy 2012-02-08 01:50:55

回答

1

您可以用去應用Casteljau算法做到這一點。如果你真的爲它check out the Wikipedia page here的數學,但如果你不是到數學它可能會迷惑你比什麼都重要時,它其實很簡單......

  1. 計算沿的參數值曲線(在0.0和1.0之間)。要做到這一點,你可以定期計算一組點(0.1,0.2,0.3等),然後找到最接近你的觸點的兩個點,並重復這些點之間的參數化,如果你想要更多的精度(0.21,0.22, 0.23等)。這將導致曲線段上的數字介於0.0和1.0之間,表示您觸摸的位置。
  2. 這個位很難在文本中解釋,但在標題下的this page左右有一個很好的可視化細分貝塞爾曲線。您可以使用圖表下面的滑塊查看它的工作原理,這裏是我的文本解釋:您需要細分曲線段控制點之間的直線,與您在步驟1中計算出的參數化值成正比。因此,如果您計算0.4,有四個點(A,B,C,D)加上曲線上最接近你的觸摸點的曲線上的分割點,我們稱之爲分割點S:
    • 計算一個臨時點T這是沿線B →ç
    • 設點A1等於A點
    • 計算點B1是沿着線A →乙
    • Calcu 0.4 0.4遲點C1,其是沿着線B1 →Ť
    • 設點D1等於分割點S
    • 設點D2等於到點d
    • 計算點C2是沿着線(0.4C)→ 0.4 d
    • 計算點B2這是沿線0.4Ť→ C2
    • 設點A2等於分割點S

現在您有兩條新的貝塞爾曲線,第一條使用控制點A1,B1,C1,D1,第二條使用A2,B2,C2,D2。

相關問題