拉伸由贝塞尔曲线构成的椭圆以适合视图边界

时间:2012-07-14 08:06:33

标签: iphone ios cocoa-touch geometry core-graphics

我在插画家中创建了一个特殊的椭圆,我需要在我的应用中绘制一个椭圆。我已经使用Qwarkee将其转换为核心图形代码主要使用:

void CGPathAddCurveToPoint (CGMutablePathRef path, const CGAffineTransform *m, CGFloat cp1x, CGFloat cp1y, CGFloat cp2x, CGFloat cp2y, CGFloat x, CGFloat y);

以下是代码:

CGMutablePathRef pPath_0 = CGPathCreateMutable();
CGPathMoveToPoint(pPath_0, NULL, 515.98,258.24);
CGPathAddCurveToPoint(pPath_0, NULL, 515.98,435.61,415.54,515.98,258.24,515.98);
CGPathAddCurveToPoint(pPath_0, NULL, 100.94,515.98,0.50,435.61,0.50,258.24);
CGPathAddCurveToPoint(pPath_0, NULL, 0.50,80.86,100.94,0.50,258.24,0.50);
CGPathAddCurveToPoint(pPath_0, NULL, 415.54,0.50,515.98,80.86,515.98,258.24);
CGPathCloseSubpath(pPath_0);

enter image description here

该比例尺寸椭圆的直径为515.98。现在我想更改代码,以便椭圆将被拉伸以适应我的视图边界,无论它的大小。终点是显而易见的,我可以使用视图的高度和宽度来确定这一点。但是,我无法理解如何确定控制点。我是否将这些作为视图高度/视图宽度的比例?我不确定我是否完全理解贝塞尔路径的数学因此我可以保持相同数量的曲线,因为视图在水平或纵向上拉伸。

1 个答案:

答案 0 :(得分:0)

我在一个物理论坛上发布了这个帖子,一个好人给了我一个很好的解决方案:

http://www.physicsforums.com/showthread.php?s=aff26efd9c911d2a8c29118f550b86fb&p=3996775#post3996775