我将此作为一项任务,但我仍然坚持实施区域部分。作业已经上交(完成约80%)。不过,我仍然想知道如何实现这一点。我被困在第84-86行。这是提示。
提示:使用JS
计算不规则形状多边形的面积 INPUT:一个3-6坐标的嵌套数组,表示为[x,y](顺时针顺序)
输出:面积计算为2位有效数字
伪代码:
循环输入并检查错误情况:
一个。阵列长度< 3或阵列长度> 6
湾数组不是空的
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)
例如:area = -70 -(-56) = 57/2 = 7
返回area.toPrecision(2)
以获得一个sig fig
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");
}
}
}
答案 0 :(得分:0)
如果您只是使用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; 7英亩&#34;除非单位不是标准单位(例如1 = 184英尺左右)。