在 canvas 中怎么计算不规则图形的面积?

作者站长头像
站长
· 阅读数 18

在 canvas 中怎么计算不规则图形的面积?在 canvas 中,用鼠标绘制了一个不规则图形,不要第三方js库,怎么计算这个不规则图形的面积?要源码

回复
1个回答
avatar
test
2024-06-20

自己算需要分割三角形,遍历多边形的每个顶点,交叉相乘相应的坐标以找到包围该多边形的区域

高斯面积公式 wiki

answer image

answer image

公式翻译为代码

function getPolygonArea(points) {
  var numPoints = points.length;
  var area = 0;
  var i, j;

  for (var i = 0, j = numPoints - 1; i < numPoints; i++) {
    var pi = points[i];
    var pj = points[j];
    area += (pj.x - pi.x) * (pi.y + pj.y);
    j = i;
  }

  return Math.abs(area / 2);
}

// ex 以A为起点,顺时针。  逆时针也是可以的
var polygonPoints = [
  { x: 5, y: 0 },
  { x: -5, y: -6 },
  { x: -10, y: 2 },
  { x: -2, y: 15 },
  { x: 7, y: 10 },
];

var area = getPolygonArea(polygonPoints);
console.log('多边形的面积为:', area);

注意:方法中的点位必须是按照顺序传入,逆时针 顺时针都行,不能胡乱传入注意:方法中的点位必须是按照顺序传入,逆时针 顺时针都行,不能胡乱传入验算:answer image


canvas库,基本都提供了计算多边形面积的方法

  1. Paper.jsPath 对象有 area 属性,可以用于获取面积。
var path = new Path([point1, point2, point3, ...]);
var area = path.area;
  1. Fabric.jsPolygon 对象可以用 getArea 方法来获取多边形的面积。
var polygon = new fabric.Polygon(points, {
    fill: 'red',
});
var area = polygon.getArea();

其他的库你可以自己找找看

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容