2010-03-04 88 views
6

我希望能夠使用這個作爲我的筆畫。我如何儘可能高效地做到這一點,並且在繪圖時,我在想CGPatternRef,但我真的不知道該怎麼做。我如何在Core Graphics中繪製這樣的圖像

編輯: 它不需要翹曲的路徑。我只是沒有在Illustrator中解決這個問題。 alt text

+3

沒有人能夠在未登錄到Apple開發者論壇的情況下看到該圖片。請將其發佈到http://imgur.com/或類似的服務,並編輯問題以從中嵌入圖像。 – 2010-03-04 17:42:33

+0

在編寫本文時,Apple Dev站點進行維護時不起作用。 – TechZen 2010-03-04 18:49:08

回答

0

這看起來像一個OpenGL的工作。 CoreGraphics並沒有提供任何簡單的方法,我知道它們會根據它們靠近路徑來翹曲星星。

+0

我不需要將星星扭曲到我繪製的路徑。 – Jaba 2010-03-04 19:26:49

2

您需要走路徑並計算等距(沿路徑)的曲線座標。這是便宜的。旋轉得到一個有點毛(圍繞切線旋轉),但總體而言,這是一個基本的問題bézier curve。只需求解曲線方程並在每個頂點渲染一顆星。

沒有什麼內置的,將做到這一切。您可以查詢交點的點,但只有渲染可以解決曲線問題。這是由CoreGraphics封裝的,所以你不能把它拉出來或利用它們已有的東西。

這是你應該考慮自己寫的東西。這並不難;誠實。只需要對微積分有基本的瞭解......如果有的話。如果你自己寫,你甚至可以添加翹曲效果,如果你喜歡。

3

Apple文檔有幫助嗎?

請參閱Quartz 2D Programming Guide, How Patterns Work中的章節或模式。

這裏是如何繪製的開始(從上面的文檔),PSIZE是明星大小:

static void MyDrawStencilStar (void *info, CGContextRef myContext) 
{ 
    int k; 
    double r, theta; 

    r = 0.8 * PSIZE/2; 
    theta = 2 * M_PI * (2.0/5.0); // 144 degrees 

    CGContextTranslateCTM (myContext, PSIZE/2, PSIZE/2); 

    CGContextMoveToPoint(myContext, 0, r); 
    for (k = 1; k < 5; k++) { 
     CGContextAddLineToPoint (myContext, 
        r * sin(k * theta), 
        r * cos(k * theta)); 
    } 
    CGContextClosePath(myContext); 
    CGContextFillPath(myContext); 
} 

只需添加曲線變換,並在每個點繪製的明星。

這是simple C code to calculate points on cubic bezier curve

+0

我認爲Pestilence是正確的,我試圖用模式撫摸,但使用模式作爲壁紙,例如它可以很好地撫摸矩形,但是在撫摸曲線時它不會將星星放在中風中,它只是在星球中劃分星星,以便得到星星的碎片 - 就像在牆上繪製常規圖案然後切割走出一條曲線,這些星星在曲線上不能很好地吻合...... – stefanB 2010-03-15 21:45:59

+0

我如何適應這個例子以畫一條線上的星星? – daveoncode 2011-12-09 00:02:32

相關問題