首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS CoreGraphics:绘制圆弧,根据相交弦定理确定圆弧角度

iOS CoreGraphics:绘制圆弧,根据相交弦定理确定圆弧角度
EN

Stack Overflow用户
提问于 2012-07-01 05:12:45
回答 2查看 5.2K关注 0票数 6

我正在尝试弄清楚如何在CoreGraphics中画一条弧。在下面的场景中,我了解要进行哪些方法调用以及如何计算角度。

代码语言:javascript
运行
复制
----------
|        |
*--------*

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

代码语言:javascript
运行
复制
---------*
|        |
*---------

请看我图片的底部。

Ray Wenderlich有一个关于只在第一个提到的点位置创建圆弧的great tutorial

代码语言:javascript
运行
复制
// 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;
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-08 07:29:28

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

代码语言:javascript
运行
复制
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。

票数 8
EN

Stack Overflow用户

发布于 2012-07-09 16:47:46

您至少需要3个点才能确定一个圆。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11277708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档