说明
三维空间中的三角形,我们使用三个点表示。三个不共线的点,决定一个平面,所以三角形实际就是空间中平面的一小部分。
几何
要表示三角形的三个点,我们可以用一个 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()
}