使用JavaScript计算不规则多边形的面积
Calculating the area of an irregular polygon using JavaScript
我得到了这作为一个分配,但我被困在实现区域部分。作业已经交了(完成了80%左右)。不过,我仍然想知道如何实现这一点。我卡在84-86行了。这是提示符。
提示:使用JS计算不规则多边形的面积
INPUT:一个包含3-6个坐标的嵌套数组,用[x,y]表示(顺时针顺序)
输出:面积计算为2位有效数字
伪代码:
-
循环输入并检查错误情况:
A.数组长度<3或数组长度> 6
B.数组不为空
c. -10和10范围内的数字 -
循环到每个内部数组,并在下面的公式中乘以x和y:
sum_x_to_y = (X0 *Y1) + (X1* Y2)...X(n-1)* Yn sum_y_to_x = (Y0 * X1) + (Y1-X2)...Y(n-1)* Xn
,
(0, -10) (7,-10) (0,-8) (0,-10) | x | y | | 0 |-10 | | 7 |-10 | | 0 |-8 | | 0 |-10 | sum_x_to_y = 0*-10 + 7*-8 + 0*-10 = -56 sum_y_to_x = -10*7 + -10*0 + -8*0 = -70
-
area = (sum_y_to_x - sum_x_to_y) / (2.00)
ex:
area = -70 -(-56) = 57/2 = 7
-
返回
area.toPrecision(2)
有一个信号图function 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) { //check for empty array console.log("Invalid input. Coordinates cannot be empty."); } if (arr_size < 3 || arr_size > 7) { //check input outside of 3-6 range console.log("Input out of range."); } for (var i = 0; i < arr_size; i++) { for (var j = 0; j < array_coords[i].length; j++) { //test for inner coordinates -10 to 10 range if (array_coords[i][j] < -10 || array_coords[i][j] > 10) { console.log("Coordinates outside of -10 to 10 range."); } // I NEED TO IMPLEMENT TO calc for AREA here sum_x_to_y += array_coords[i][j] * array_coords[j][i]; sum_y_to_x += array_coords[j][i] * array_coords[i][j]; var area = (sum_y_to_x - sum_x_to_y) / 2; console.log(area.toPrecision(2) + "acres"); } } }
如果您只是使用辛普森法则来计算面积,下面的函数将完成这项工作。只要确保多边形是闭合的。如果没有,只需在末尾重复第一个坐标对。
此函数使用单个值数组,假设它们成对(偶数索引x,奇数索引y)。它可以转换为使用包含坐标对的数组的数组。
该函数不对输入值进行任何越界或其他测试。
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
因为你没有张贴实际的代码,我没有输入任何你的例子。序列:
[[1,0],[1,1],[0,0],[0,1]]
不是一个多边形,它是一条Z形线,即使转换为单位多边形也不能解析为"7 acres",除非单位不是标准的(例如1 =约184英尺)。
相关文章:
- SVG/JavaScript:尝试选择和更改多边形点
- 如何获取谷歌地图多边形的当前fillColor
- 如何在OpenLayers中获取动态绘制的多边形的坐标
- 使用Google Maps API驱动时间多边形
- Matlab点在多边形中
- 如何使所有绘制的(矩形、圆形、直线、多边形)都可拖动?纯JS
- 如何在fabric js中向多边形添加图像
- 使用css跨浏览器动态剪切多边形
- fabric js多边形集合坐标
- 从传单数据到GeoJSON的多边形
- 我们可以为Cesium中使用CZML绘制的多边形设置outlineWidth属性吗
- 如何在pixi.js多边形上放置纹理
- 在谷歌地图V3上选择多边形
- 如何在鼠标单击时更改KML多边形的颜色
- 谷歌地图多边形减慢浏览器速度
- 精灵从pixi到p2的边界多边形
- d3js/没有固定坐标的多边形
- 可以在圆形 HTML5 画布上内切的不规则多边形
- SVG多边形边的厚度不规则
- 使用JavaScript计算不规则多边形的面积