向量三角法在某些特殊情况会判断出错,取决于你截取三角形的准确性。
以下方法能够更正确的判断svg旋转方向。
/**
* 判断svg形状是否顺时针
* @param poly [[x,y],[x,y],...]
* return true:顺时针,false:逆时针,0:unknown
*/
function isClockwise(poly) {
if (!poly || poly.length < 3) return 0
let end = poly.length - 1
let sum = poly[end][0] * poly[0][1] - poly[0][0] * poly[end][1]
for (let i = 0; i < end; ++i) {
const n = i + 1
sum += poly[i][0] * poly[n][1] - poly[n][0] * poly[i][1]
}
return sum <= 0
}