如何在Core Graphics中的两个任意点之间绘制完美的半圆?

时间:2018-05-18 21:00:35

标签: swift core-graphics

我想使用Swift在Core Graphics中的任意两个任意CGPoint之间绘制semicircle我想使用Core Graphics和图层。我们需要一个标记来决定进入哪两个可能的方向。

例如,给定CGPoint(x: 8, y: 92)CGPoint(x: 28, y: 66),并知道我们想要顺时针方向绘制半圆并且它是一个完美的半圆,我应该插入{{1}完成这个?

主旨

我根据Rob Mayoff的回答为此创建了一个gist

1 个答案:

答案 0 :(得分:2)

拨打您的指定点p0p1

您想要调用graphicsContext.addArc(center: center, radius: radius, startAngle: radians0, endAngle: radians1, clockwise: clockwise)并让它绘制一个端点为p0p1的半圆。让我们弄清楚论据应该是什么。

  • 要制作以p0p1结尾的半圆,center必须是p0p1之间的中点:{{1} }。

  • 要使弧线在CGPoint(x: 0.5 * (p0.x + p1.x), y: 0.5 * (p0.y + p1.y))p0结束,p1必须是从radiuscenter的距离(或{{1} }}),等于p0p1之间距离的一半:p0

  • p1必须是从0.5 * hypot(p1.x - p0.x, p1.y - p0.y)radians0的角度,它等于从centerp0的角度(因为p1 },p0center是共线的):p0

  • 要制作半圆,p1必须等于atan2(p1.y - p0.y, p1.x - p0.x)

  • radians1是您“决定进入哪两个可能方向的标志”。