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

How do I draw a perfect semicircle between two arbitrary points in Core Graphics?

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

比如给定CGPoint(x: 8, y: 92)CGPoint(x: 28, y: 66),知道我们要画一个顺时针方向的半圆,而且是一个完美的半圆,那么在addArc 完成这个?

要点

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

调用您给定的点数 p0p1

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

  • 要在 p0p1 处画一个半圆,center 必须是 p0p1 之间的中点: CGPoint(x: 0.5 * (p0.x + p1.x), y: 0.5 * (p0.y + p1.y)).

  • 要使圆弧在p0p1处结束,radius必须是从centerp0的距离(或 p1),等于 p0p1 之间距离的一半:0.5 * hypot(p1.x - p0.x, p1.y - p0.y).

  • radians0一定是centerp0的夹角,等于p1p0的夹角(因为centerp0p1共线):atan2(p1.y - p0.y, p1.x - p0.x).

  • 要构成一个半圆,radians1必须等于radians0 + .pi

  • clockwise 是你的“标志,决定进入两个可能方向中的哪一个”。