簡體   English   中英

使用JavaScript計算不規則多邊形的面積

[英]Calculating the area of an irregular polygon using JavaScript

我將其作為任務分配,但我堅持執行區域部分。 作業已上交(完成約80%)。 不過,我仍然想知道如何實現這一點。 我被困在84-86行。 這是提示。

提示:使用JS計算不規則形狀的多邊形的面積

輸入:3-6個坐標的嵌套數組,表示為[x,y](順時針方向)
輸出:面積計算為2位有效數字

偽代碼:

  1. 循環輸入並檢查錯誤情況:
    一種。 數組長度<3或數組長度> 6
    b。 數組不為空
    C。 -10和10范圍內的數字

  2. 循環到每個內部數組,並在以下公式中將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 
  3. area = (sum_y_to_x - sum_x_to_y) / (2.00)

    例如: area = -70 -(-56) = 57/2 = 7

  4. 返回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"); } } } 

如果您僅使用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英尺)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM