برنامه محاسبه مساحت چند ضلعی با n ضلع — به زبان ساده

۵۵۸ بازدید
آخرین به‌روزرسانی: ۱۰ تیر ۱۴۰۲
زمان مطالعه: ۴ دقیقه
برنامه محاسبه مساحت چند ضلعی با n ضلع — به زبان ساده

در این مطلب، روش نوشتن برنامه محاسبه مساحت چند ضلعی با n ضلع بیان و پیاده‌سازی آن در زبان‌های برنامه‌نویسی گوناگون شامل «سی‌پلاس‌پلاس» (++C)، «جاوا» (Java)، «پایتون» (Python)، «سی‌شارپ» (#C) و «پی‌اچ‌پی» (PHP) انجام شده است. مختصات یک چند ضلعی با n راس داده شده است. هدف محاسبه مساحت چند ضلعی است. در اینجا، ترتیب بدین معنا است که مختصات یا به صورت ساعت‌گرد و یا به صورت پادساعت‌گرد از اولین تا آخرین راس داده شده است. مثال زیر برای درک بهتر موضوع، قابل توجه است.

Input :  X[] = {0, 4, 4, 0}, Y[] = {0, 0, 4, 4};
Output : 16

Input : X[] = {0, 4, 2}, Y[] = {0, 0, 4}
Output : 8

مساحت را می‌توان با استفاده از «فرمول بند کفش» (Shoelace Formula) محاسبه کرد.

$$ \large \begin{align*} A & =\frac{1}{2}\left |\sum_{i=1}^{n-1}x_iy _{(i+1)}+x_ny_1 – \sum_{i=1}^{n-1}x_{(i+1)}y_i – x _ 1 y _n \right |
\\ & = |1/2[(x_{1}y_{2}+x_{2}y_{3}+…+x_{n-1}y_{n}+x_{n}y_{1}) \\ & \;\;\;\;\;-(x_{2}y_{1}+x_{3}y_{2}+…+x_{n}y_{n-1}+x_{1}y_{n})] | \end{align*} $$

در ادامه، پیاده‌سازی فرمول بالا در زبان‌های برنامه‌نویسی گوناگون انجام شده است.

برنامه محاسبه مساحت چند ضلعی با n ضلع در C++‎

1// C++ program to evaluate area of a polygon using 
2// shoelace formula 
3#include <bits/stdc++.h> 
4using namespace std; 
5  
6// (X[i], Y[i]) are coordinates of i'th point. 
7double polygonArea(double X[], double Y[], int n) 
8{ 
9    // Initialze area 
10    double area = 0.0; 
11  
12    // Calculate value of shoelace formula 
13    int j = n - 1; 
14    for (int i = 0; i < n; i++) 
15    { 
16        area += (X[j] + X[i]) * (Y[j] - Y[i]); 
17        j = i;  // j is previous vertex to i 
18    } 
19  
20    // Return absolute value 
21    return abs(area / 2.0); 
22} 
23  
24// Driver program to test above function 
25int main() 
26{ 
27    double X[] = {0, 2, 4}; 
28    double Y[] = {1, 3, 7}; 
29  
30    int n = sizeof(X)/sizeof(X[0]); 
31  
32    cout << polygonArea(X, Y, n); 
33} 

برنامه محاسبه مساحت چند ضلعی با n ضلع در جاوا

1// Java program to evaluate area  
2// of a polygon using shoelace formula 
3import java.io.*; 
4  
5class GFG  
6{ 
7    // (X[i], Y[i]) are coordinates of i'th point. 
8    public static double polygonArea(double X[], double Y[],  
9                                                       int n) 
10    { 
11        // Initialze area 
12        double area = 0.0; 
13      
14        // Calculate value of shoelace formula 
15        int j = n - 1; 
16        for (int i = 0; i < n; i++) 
17        { 
18            area += (X[j] + X[i]) * (Y[j] - Y[i]); 
19              
20            // j is previous vertex to i 
21            j = i;  
22        } 
23      
24        // Return absolute value 
25        return Math.abs(area / 2.0); 
26    } 
27  
28    // Driver program  
29    public static void main (String[] args) 
30    { 
31        double X[] = {0, 2, 4}; 
32        double Y[] = {1, 3, 7}; 
33      
34        int n = 3; 
35        System.out.println(polygonArea(X, Y, n)); 
36    } 
37  
38} 
39// This code is contributed by Sunnnysingh 

برنامه محاسبه مساحت چند ضلعی با n ضلع در پایتون ۳

1# python3 program to evaluate 
2# area of a polygon using 
3# shoelace formula 
4  
5# (X[i], Y[i]) are coordinates of i'th point. 
6def polygonArea(X, Y, n): 
7  
8    # Initialze area 
9    area = 0.0
10  
11    # Calculate value of shoelace formula 
12    j = n - 1
13    for i in range(0,n): 
14        area += (X[j] + X[i]) * (Y[j] - Y[i]) 
15        j = i   # j is previous vertex to i 
16      
17  
18    # Return absolute value 
19    return int(abs(area / 2.0)) 
20  
21# Driver program to test above function 
22X = [0, 2, 4] 
23Y = [1, 3, 7] 
24n = len(X) 
25print(polygonArea(X, Y, n)) 
26  
27# This code is contributed by 
28# Smitha Dinesh Semwal 

برنامه محاسبه مساحت چند ضلعی با n ضلع در #C

1// C# program to evaluate area 
2// of a polygon using shoelace formula 
3using System; 
4  
5class GFG { 
6      
7    // (X[i], Y[i]) are coordinates of i'th point. 
8    public static double polygonArea(double[] X, 
9                               double[] Y, int n) 
10    { 
11          
12        // Initialze area 
13        double area = 0.0; 
14  
15        // Calculate value of shoelace formula 
16        int j = n - 1; 
17          
18        for (int i = 0; i < n; i++) { 
19            area += (X[j] + X[i]) * (Y[j] - Y[i]); 
20  
21            // j is previous vertex to i 
22            j = i; 
23        } 
24  
25        // Return absolute value 
26        return Math.Abs(area / 2.0); 
27    } 
28  
29    // Driver program 
30    public static void Main() 
31    { 
32        double[] X = { 0, 2, 4 }; 
33        double[] Y = { 1, 3, 7 }; 
34  
35        int n = 3; 
36        Console.WriteLine(polygonArea(X, Y, n)); 
37    } 
38} 
39  
40// This code is contributed by vt_m. 

برنامه محاسبه مساحت چند ضلعی با n ضلع در PHP

1<?php 
2// PHP program to evaluate area of  
3// a polygon using shoelace formula 
4  
5// (X[i], Y[i]) are  
6// coordinates of i'th point. 
7function polygonArea($X, $Y, $n) 
8{ 
9    // Initialze area 
10    $area = 0.0; 
11  
12    // Calculate value of 
13    // shoelace formula 
14    $j = $n - 1; 
15    for ($i = 0; $i < $n; $i++) 
16    { 
17        $area += ($X[$j] + $X[$i]) *  
18                 ($Y[$j] - $Y[$i]); 
19                   
20        // j is previous vertex to i          
21        $j = $i;  
22    } 
23  
24    // Return absolute value 
25    return abs($area / 2.0); 
26} 
27  
28// Driver Code 
29$X = array(0, 2, 4); 
30$Y = array(1, 3, 7); 
31  
32$n = sizeof($X); 
33  
34echo polygonArea($X, $Y, $n); 
35  
36// This code is contributed by ajit 
37?> 

خروجی قطعه کدهای بالا برای یال‌های داده شده، به صورت زیر است.

2

دلیل نام‌گذاری فرمول بند کفش

به این رابطه، به دلیل روش مورد استفاده برای ارزیابی آن، فرمول بند کفش (Shoelace Formula) گفته می‌شود.

مثال زیر در این راستا قابل توجه است.

Let the input vertices be
 (0, 1), (2, 3), and (4, 7). 

Evaluation procedure matches with process of tying
shoelaces.

We write vertices as below
  0    1
  2    3
  4    7
  0    1  [written twice]

we evaluate positive terms as below
  0  \  1
  2  \  3
  4  \  7
  0     1  
i.e., 0*3 + 2*7 + 4*1 = 18 

we evaluate negative terms as below
  0     1
  2  /  3
  4  /  7
  0  /  1  
i.e., 0*7 + 4*3 + 2*1 = 14

Area = 1/2 (18 - 14) = 2 

See this for a clearer image.

روش کار فرمول بند کفش

همیشه می‌توان یک چند ضلعی را به چند مثلث تقسیم کرد. فرمول مساحت با گرفتن هر یال AB و محاسبه مساحت (علامت‌گذاری شده) مثلث ABO با راس o و با محاسبه ضرب داخلی (که مساحت متوازی‌الاضلاع را به دست می‌دهد) و تقسیم بر ۲، حاصل می‌شود.

با نزدیک شدن به چند ضلعی، این مثلث‌ها با مساحت مثبت و منفی با یکدیگر هم‌پوشانی خواهند داشت و ناحیه بین راس و چند ضلعی لغو می‌شود و مجموع آن برابر با صفر قرار می‌گیرد، در حالی که فقط مساحت ناحیه درون مثلث مرجع، باقی می‌ماند.

^^

بر اساس رای ۴ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
GeeksforGeeks
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *