S02E15:三角形内心(内切圆圆心)

673 阅读1分钟

说明

三角形的内心,就是内切圆圆心,同时也是角平分线的交点,也就是到三边距离相等的点。

几何

在重心坐标系统中,内切圆的圆心坐标是很好计算的。

三角形三边长为 l1l2l3,周长 p = l1 + l2 + l3。那么内心的重心坐标为(l1/p, l2/p, l3/p)。同时求出的,还有内切圆半径,由三角形面积除以周长得到:

那么,接下来如何知道世界坐标系统下的内心坐标呢?还记得我们可以把三角形的三个顶点当做一个局部坐标系么?只需要将内心的重心坐标,乘以局部坐标系,就可以将内心从重心坐标系统,转换到世界坐标系统中。

代码

///三角形内心的重心坐标
static func incenterInBarycentricCoordinate(triangle:Triangle) -> simd_float3 {
    let edges = edgesLength(triangle: triangle)
    let p = edges.sum()
    return edges / p
}
///三角形内心、三边距离相等点
static func incenter(triangle:Triangle) -> simd_float3 {
    let coor = incenterInBarycentricCoordinate(triangle: triangle)
    let r = triangle.points * coor
    return r
}
///三角形内切圆半径
static func incenterRadius(triangle:Triangle) -> Float {
    let edges = edgesLength(triangle: triangle)
    let p = edges.sum()
    let A = area(edgesLength: edges)
    return A / p
}