如何在凹多边形中获得凹坑,我有一个多边形arr

时间:2017-05-20 16:10:46

标签: javascript polygon concave

let arr=[[4,3],[4,9],[7,8],[9,8],[10,10],[10,4]]

我知道[7,8],[9,8]那里有坑,我想写一个函数来得到这个数组中的凹点我怎么写。

我使用的是图形算法,但不适用于复杂的凹边。然后我想到我是否可以处理服务器给我的数据,这是一个多边形。

2 个答案:

答案 0 :(得分:0)

理论上,您可以获得多边形的面积。然后通过跳过一个点再次获得多边形的区域。如果多边形大于原始区域,则会得到一个凹点。

BroadCast
const getArea = points => Math.abs(points.reduce((a, p, i, pp) => a + (p[1] + pp[(i + 1) % pp.length][1]) * (p[0] - pp[(i + 1) % pp.length][0]), 0)) / 2;

let points = [[4, 3], [4, 9], [7, 8], [9, 8], [10, 10], [10, 4]],
    area = getArea(points),
    concave = points.filter((_, i, pp) => getArea(pp.filter((_, j) => i !== j)) > area);

console.log(area);
console.log(concave);

答案 1 :(得分:0)

您可以在顶点上的两个连续边之间取十字产品:符号将指示该点是凸面还是凹面。

nativeEvent

问题在于符号还取决于环是顺时针还是逆时针。您可以做的是检查左上顶点的符号(该顶点肯定是严格凸起的),如果顶点的符号乘以左上顶点的符号为负,则它是凹的。

对于左上顶点,我指的是具有最小y的顶点中具有最小x的顶点。在进行这种计算之前,您应该删除重复的顶点。