如何在另外两条平行线之间画一条直线?

时间:2017-07-26 11:25:06

标签: ios swift xcode core-graphics

enter image description here 我需要使用手指的位置绘制第一行。 后来我需要使用手指的位置绘制第二条平行线。 我已经做到了。 主要任务是在这些平行线之间绘制第三条垂直线。 我怎样画第三行?

1 个答案:

答案 0 :(得分:0)

如果您有2条平行线并希望在它们之间绘制垂直线,则需要1个额外点。假设这一点位于第一行的中间(称之为C)。

还假设我们有以下内容:

L1 // Represents the first line
L2 // Represents the second line
L1.start // Represents the line start point CGPoint
L1.end // Represents the line end point CGPoint

现在你希望在第一行L1上绘制一条垂直线,为此你需要得到它的normal,它在2D中非常简单。首先通过减去给定行direction = CGPoint(x: L1.end.x-L1.start.x, y: L1.end.y-L1.start.y)的起点和终点来获得行方向。现在为了得到法线,我们只需要反转坐标并按方向长度划分:

let length = sqrt(direction.x*direction.x + direction.y*direction.y)
let normal = CGPoint(x: -direction.y/length, y: direction.x/length) // Yes, normal is (-D.y, D.x)

所以说开始点是C,现在我们只需要在另一行找到C + normal*distanceBetweenLines的终点。所以我们需要两条线之间的距离,这应该通过点积得到最好的接受......

首先,我们需要两条线中任意一对点之间的矢量(第一行上的一个点和第二行上的另一个点)。所以我们来看看

let between = CGPoint(x: L1.start.x-L2.start.x, y: L1.start.y-L2.start.y)

现在我们需要使用点积将此线投影到法线以获得投影的长度,即两条线之间的长度

let distanceBetweenLines = between.x*normal.x + between.y*normal.y

所以现在我们有了所有的点来绘制两条给定线之间的垂直线,假设线是平行的:

L3.start = C
L3.end = CGPoint(x: C.x + normal.x*distanceBetweenLines, y: C.y + normal.y*distanceBetweenLines)