2010-03-04 55 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

相关问题