【问题标题】:iOS CoreGraphics: Draw arc, determine arc angles from intersecting chord theoremiOS CoreGraphics:绘制弧线,从相交弦定理确定弧角
【发布时间】:2012-06-30 21:12:45
【问题描述】:

我正在尝试弄清楚如何在 CoreGraphics 中绘制弧线。我了解在以下场景中调用哪个方法以及如何计算角度。

----------
|        |
*--------*

当两个点都在矩形的底部时。但是当两个点在其他位置时,我不知道如何计算正确的角度。

---------*
|        |
*---------

查看我图片的底部。

Ray Wenderlich 有一个 great tutorial 仅针对第一次提到的点位置创建弧线。

// sample code for creating arc for path from bottom of rect
CGMutablePathRef createArcPathFromBottomOfRect(CGRect rect, CGFloat arcHeight) {
  CGRect arcRect = CGRectMake(rect.origin.x, rect.origin.y + rect.size.height
    - arcHeight, rect.size.width, arcHeight);
  CGFloat arcRadius = (arcRect.size.height/2) + (pow(arcRect.size.width, 2) /
    (8 * arcRect.size.height));
  CGPoint arcCenter = CGPointMake(arcRect.origin.x + arc.size.width/2,
    arcRect.origin.y + arcRadius);
  CGFloat angle = acos(arcRect.size.width/ (2*arcRadius));
  CGFloat startAngle = radians(180) + angle;
  CGFloat endAngle = radians(360) - angle;
  CGMutablePathRef path = CGPathCreateMutable();
  CGPathAddArc(path, NULL, arcCenter.x, arcCenter.y, arcRadius, startAngle,
    endAngle, 0);
  return path;
}

在图片底部所示的其他情况下,我如何计算角度?

【问题讨论】:

    标签: objective-c ios core-graphics


    【解决方案1】:

    我发现制作弧线的更简单方法是使用:

    void CGContextAddArcToPoint (
       CGContextRef c,
       CGFloat x1,
       CGFloat y1,
       CGFloat x2,
       CGFloat y2,
       CGFloat radius
    );
    

    如果您从 Ray Wenderlich 的网站 (https://www.raywenderlich.com/33330/core-graphics-tutorial-glossy-buttons) 查看这张图片,点 (x1,y1) 是曲线的起点,点 (x2,y2) 是终点。然后只需指定角半径,瞧!看起来这可能是一个更易于使用的 API。

    【讨论】:

      【解决方案2】:

      你需要至少 3 个点来确定一个圆。

      在您的第一个场景中,两个点位于矩形的底部,当 arcHeight 已知时,顶部中间点隐含地是第三个点。所以三个点决定了圆,从而决定了弧。所以所有的角度等都可以计算出来。

      但是,在您的第二个场景中,没有定义第三点。因此,您可以绘制通过具有不同曲率的两个点的无限数量的弧。您将需要额外的要求来修复弧。例如半径或第三个点应该是圆弧之一。

      【讨论】:

        猜你喜欢
        • 2016-12-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 1970-01-01
        • 2014-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多