S02E12:判断三角形是否是钝角

1,358 阅读1分钟

说明

三角形可以分为钝角、锐角、直角三角形。只需要点乘就可以判断。

几何

我们按顶点顺序构建向量,就会发现,如果一个角是钝角,那么它前后两个向量的点乘是大于 0 的,也就是一个向量在另一个向量上的投影是同向的。而锐角,前后两个向量点乘是小于 0 的,也就是一个向量在另一个向量上的投影是反向的。

我们就可以依次计算三个角,如果有大于 0 的,说明是钝角三角形。

代码

///是否是钝角三角形
static func isObtuse(triangle:Triangle) -> Bool {
    let vector1 = triangle.point2 - triangle.point1
    let vector2 = triangle.point3 - triangle.point2
    let vector3 = triangle.point1 - triangle.point3
    
    let dot1 = dot(vector1, vector2)
    let dot2 = dot(vector2, vector3)
    let dot3 = dot(vector3, vector1)
    
    return dot1 > 0 || dot2 > 0 || dot3 > 0
}