S01E08:直线与直线平行/共线

397 阅读1分钟

说明

直线与直线的位置关系有平行和不平行两种,其中平行时,还可能会共线,即两条直线相同。

几何

首先,判断直线是否平行很简单,当向量叉乘为 0 时,即为平行,不管是相同方向还是相反方向都可以直接用叉乘判断。 叉乘代表了向量围成的平行四边形的面积,当向量平行时,叉乘为 0 向量。 如果平行,才有可能共线。而判断共线的方法,就是在两条直线上各取一点,连接为新的向量,计算其与原有直线的是否方向相同/相反。如下图,直线 AB 与直线 CD 平行,但我们连接点 A 与点 C,发现它与原有直线不平行,所以这两条直线并不共线。

代码

static func isParallel(line1:Line, line2:Line) -> Bool {
    let crossValue = cross(line1.direction, line2.direction)
    if length_squared(crossValue) < 0.0001 {
        return true
    }
    return false
}
static func isSame(line1:Line, line2:Line) -> Bool {
    if !isParallel(line1: line1, line2: line2) {
        return false
    }
    let vector = line1.position - line2.position
    let crossValue = cross(vector, line1.direction)
    if length_squared(crossValue) < 0.0001 {
        return true
    }
    return false
}