S02E11:三角形定义、边长与周长

376 阅读1分钟

说明

三维空间中的三角形,我们使用三个点表示。三个不共线的点,决定一个平面,所以三角形实际就是空间中平面的一小部分。

几何

要表示三角形的三个点,我们可以用一个 3x3 的矩阵,用每一列来代表一个点。这样做的一个好处是,当需要对三个点做统一运算时,可以直接用矩阵运算。

还有一种更加“几何”的理解方式:把三个点当成是矩阵的 x, y, z 轴,这样一个三角形实际就是一个不包含平移的矩阵,只有旋转、缩放、错切,不一定正交。

本文中,我们先来定义其数据结构,并计算各连长和周长。边长按点的对边计算,如 point1点对应的边,是它对面的边,也就是 point2 和 point3 组成的边。

周长,则是边长的和,没有计算捷径只能使用distance()函数计算。

代码

//定义三角形
struct Triangle {
    let points:float3x3
    
    var point1: simd_float3 {
        get{
            return points.columns.0
        }
    }
    var point2: simd_float3 {
        get{
            return points.columns.1
        }
    }
    var point3: simd_float3 {
        get{
            return points.columns.2
        }
    }
}
///三条边的长度。(x,y,z) 按顺序为 point1 的对边长,point2 的对边长,point3 的对边长
static func edgesLength(triangle:Triangle) ->simd_float3 {
    let l1 = distance(triangle.point2, triangle.point3)
    let l2 = distance(triangle.point1, triangle.point3)
    let l3 = distance(triangle.point2, triangle.point1)
    return simd_float3(l1, l2, l3)
}
///三角形的周长
static func perimeter(triangle:Triangle) -> Float {
    return edgesLength(triangle: triangle).sum()
}