برنامه محاسبه مساحت چند ضلعی با 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 و با محاسبه ضرب داخلی (که مساحت متوازیالاضلاع را به دست میدهد) و تقسیم بر ۲، حاصل میشود.
با نزدیک شدن به چند ضلعی، این مثلثها با مساحت مثبت و منفی با یکدیگر همپوشانی خواهند داشت و ناحیه بین راس و چند ضلعی لغو میشود و مجموع آن برابر با صفر قرار میگیرد، در حالی که فقط مساحت ناحیه درون مثلث مرجع، باقی میماند.
- مجموعه آموزشهای دروس ریاضیات
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- مجموعه آموزشهای ساختمان داده و طراحی الگوریتم
- مساحت مثلث — به زبان ساده
- متوازیالاضلاع، تعریف و محاسبات آن در هندسه — به زبان ساده
^^