实现:
javascript"> /*** @description: 获取多边形边界(边界框或包围盒算法)* @param {*} polygon 多边形顶点数组* @return {*} rect 顶点数组*/getBoundingRectangle(polygon) {if (!Array.isArray(polygon) || polygon.length < 3) {throw new Error('Polygon must have at least 3 points.');}// 使用 reduce 方法找到最小和最大坐标const bounds = polygon.reduce(([minX, minY, maxX, maxY], [x, y]) => [Math.min(minX, x),Math.min(minY, y),Math.max(maxX, x),Math.max(maxY, y)],[Infinity, Infinity, -Infinity, -Infinity]);// 解构赋值以获取最小和最大坐标const [minX, minY, maxX, maxY] = bounds;// 返回矩形的四个顶点坐标return [[minX, minY], // 左下角[maxX, minY], // 右下角[maxX, maxY], // 右上角[minX, maxY] // 左上角];}
调用:
javascript"> //多边形顶点坐标const points = [[225, 97],[185, 144],[151, 219],[142, 284],[177, 318],[188, 381],[207, 425],[239, 438],[287, 465],[315, 448],[359, 427],[375, 375],[387, 307],[376, 237],[340, 219],[325, 180],[313, 120],[290, 93],[259, 85]];//返回包围盒坐标const box = this.getBoundingRectangle(points);console.log(box)
效果:蓝色矩形为box,粉色区域为多边形区域。