说明
三角形可以分为钝角、锐角、直角三角形。只需要点乘就可以判断。
几何
我们按顶点顺序构建向量,就会发现,如果一个角是钝角,那么它前后两个向量的点乘是大于 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
}