2017-07-26 163 views
-3

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

+1

那么,有什么问题,不是做一些陈述之外? –

+0

这是一个关于(Swift)编程或关于几何/数学的问题吗? –

+0

@ElTomato如何绘制平行线之间的垂直线? – kvv

回答

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之间的长度。

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

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