这是我的任务,但我不得不执行面积部分。作业已经交上来了(完成了大约80%)。不过,我仍然想知道如何实现这一点。我被卡在84-86线上了。这是提示。
提示:使用JS计算不规则多边形的面积
输入:以x,y表示的3-6坐标的嵌套数组。
产出:面积计算为2个重要数字
伪码:
area = (sum_y_to_x - sum_x_to_y) / (2.00)
例:area = -70 -(-56) = 57/2 = 7area.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");}}发布于 2014-07-17 01:42:31
如果您只是使用Simpson规则来计算面积,下面的函数将完成此工作。确保多边形是封闭的。如果没有,只需在末尾重复第一个坐标对即可。
这个函数使用一个值数组,假设它们成对(偶数索引为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英亩“,除非这些单位不是标准的(例如1= 184英尺左右)。
https://stackoverflow.com/questions/24793288
复制相似问题