首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JavaScript计算不规则多边形的面积

用JavaScript计算不规则多边形的面积
EN

Stack Overflow用户
提问于 2014-07-17 01:02:56
回答 1查看 3.3K关注 0票数 0

这是我的任务,但我不得不执行面积部分。作业已经交上来了(完成了大约80%)。不过,我仍然想知道如何实现这一点。我被卡在84-86线上了。这是提示。

提示:使用JS计算不规则多边形的面积

输入:以x,y表示的3-6坐标的嵌套数组。

产出:面积计算为2个重要数字

伪码:

  1. 循环输入并检查错误情况: a.数组长度<3或数组长度>6 b.数组不是空的 c. -10和10范围内的数字
  2. 循环到每个内部数组,并在公式below:sum_x_to_y = (X0 *Y1) + (X1* Y2)...X(n-1)* Yn sum_y_to_x = (Y0 * X1) + (Y1-X2)...Y(n-1)* Xn中乘以x和y。 例: (0,-10) (7,-10) (0,-8) (0,-10) = -56 sum_y_to_x = -10*7 +-10*7+ -10*0 + -8*0 *-8*+8*-0= -70
  3. area = (sum_y_to_x - sum_x_to_y) / (2.00) 例:area = -70 -(-56) = 57/2 = 7
  4. 返回area.toPrecision(2)有一个sig图 函数PaddockArea(array_coords) { var sum_x_to_y = 0;var sum_y_to_x = 0;var arr_size = array_coords.length;if (arr_size === 0) {//检查空数组console.log(“无效输入”)。坐标不能为空.“;}如果(arr_size <3区arr_size > 7) {//检查3-6范围内的输入(”超出范围“);} for (var i= 0;i< arr_size;i++) { for (var j= 0;j< array_coordsi.length;j++) { //测试内坐标-10至10范围,如果(array_coordsi < -10 \x{ array_coordsi > 10) {console.log(“在-10 ~ 10范围外的坐标”);}//我需要为这里的sum_x_to_y += array_coordsi *array_coordsj区域实现calc;sum_y_to_x += array_coordsj * array_coordsi;var area = (sum_y_to_x - sum_x_to_y) / 2;console.log(area.toPrecision(2) + "acres");}}
EN

回答 1

Stack Overflow用户

发布于 2014-07-17 01:42:31

如果您只是使用Simpson规则来计算面积,下面的函数将完成此工作。确保多边形是封闭的。如果没有,只需在末尾重复第一个坐标对即可。

这个函数使用一个值数组,假设它们成对(偶数索引为x,奇数为y)。它可以转换为使用包含坐标对的数组。

该函数不会对输入值执行任何越界或其他测试。

代码语言:javascript
复制
function areaFromCoords(coordArray) {

    var x = coordArray,
        a = 0;

    // Must have even number of elements
    if (x.length % 2) return;

    // Process pairs, increment by 2 and stop at length - 2
    for (var i=0, iLen=x.length-2; i<iLen; i+=2) {
       a += x[i]*x[i+3] - x[i+2]*x[i+1];
    }
    return Math.abs(a/2);
}

console.log('Area: ' + areaFromCoords([1,1,3,1,3,3,1,3,1,1])); // 4

console.log('Area: ' + areaFromCoords([0,-10, 7,-10, 0,-8, 0,-10,])); // 7

因为您没有发布实际代码,所以我没有输入任何示例。顺序:

代码语言:javascript
复制
[[1,0],[1,1],[0,0],[0,1]]

不是多边形,而是Z字形线,即使转换成单位多边形也不能分解为"7英亩“,除非这些单位不是标准的(例如1= 184英尺左右)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24793288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档