如何在 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。
调用您给定的点数 p0
和 p1
。
您想调用 graphicsContext.addArc(center: center, radius: radius, startAngle: radians0, endAngle: radians1, clockwise: clockwise)
并让它绘制一个端点为 p0
和 p1
的半圆。让我们弄清楚参数应该是什么。
要在 p0
和 p1
处画一个半圆,center
必须是 p0
和 p1
之间的中点: CGPoint(x: 0.5 * (p0.x + p1.x), y: 0.5 * (p0.y + p1.y))
.
要使圆弧在p0
和p1
处结束,radius
必须是从center
到p0
的距离(或 p1
),等于 p0
和 p1
之间距离的一半:0.5 * hypot(p1.x - p0.x, p1.y - p0.y)
.
radians0
一定是center
到p0
的夹角,等于p1
到p0
的夹角(因为center
、p0
、p1
共线):atan2(p1.y - p0.y, p1.x - p0.x)
.
要构成一个半圆,radians1
必须等于radians0 + .pi
。
clockwise
是你的“标志,决定进入两个可能方向中的哪一个”。
我想在 Core Graphics 中使用 Swift 在任意两个 CGPoint
之间绘制一个 semicircle。 我想使用 Core Graphics 而不是层。我们需要一个标志来决定进入两个可能方向中的哪一个。
比如给定CGPoint(x: 8, y: 92)
和CGPoint(x: 28, y: 66)
,知道我们要画一个顺时针方向的半圆,而且是一个完美的半圆,那么在addArc
完成这个?
要点
我根据下面 Rob Mayoff 的回答为此创建了一个 gist。
调用您给定的点数 p0
和 p1
。
您想调用 graphicsContext.addArc(center: center, radius: radius, startAngle: radians0, endAngle: radians1, clockwise: clockwise)
并让它绘制一个端点为 p0
和 p1
的半圆。让我们弄清楚参数应该是什么。
要在
p0
和p1
处画一个半圆,center
必须是p0
和p1
之间的中点:CGPoint(x: 0.5 * (p0.x + p1.x), y: 0.5 * (p0.y + p1.y))
.要使圆弧在
p0
和p1
处结束,radius
必须是从center
到p0
的距离(或p1
),等于p0
和p1
之间距离的一半:0.5 * hypot(p1.x - p0.x, p1.y - p0.y)
.radians0
一定是center
到p0
的夹角,等于p1
到p0
的夹角(因为center
、p0
、p1
共线):atan2(p1.y - p0.y, p1.x - p0.x)
.要构成一个半圆,
radians1
必须等于radians0 + .pi
。clockwise
是你的“标志,决定进入两个可能方向中的哪一个”。