الفرق بين المراجعتين لصفحة: «Algorithms/triangle area»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:إيجاد مساحة المثلث}}</noinclude> تحسب هذه الخوارزمية مساحة المثلث، وهناك طرق عديدة ل...' |
لا ملخص تعديل |
||
سطر 107: | سطر 107: | ||
} | } | ||
</source> | </source> | ||
== إيجاد | == إيجاد المساحة بواسطة الإحداثيات == | ||
إن كانت إحداثيات أركان المثلث متوفّرة، فيمكن تطبيق العلاقة التالية (علاقة رباط الحذاء Shoelace formula)لحساب المساحة: | إن كانت إحداثيات أركان المثلث متوفّرة، فيمكن تطبيق العلاقة التالية (علاقة رباط الحذاء [[wikipedia:Shoelace_formula|Shoelace formula]]) لحساب المساحة: | ||
<source lang="text">A = | 1/2 [ (x1y2 + x2y3 + ... + xn-1yn + xny1) - (x2y1 + x3y2 + ... + xnyn-1 + x1yn) ]</source> | <source lang="text">A = | 1/2 [ (x1y2 + x2y3 + ... + xn-1yn + xny1) - (x2y1 + x3y2 + ... + xnyn-1 + x1yn) ]</source> |
المراجعة الحالية بتاريخ 10:54، 26 أكتوبر 2019
تحسب هذه الخوارزمية مساحة المثلث، وهناك طرق عديدة لحساب المساحة منها:
إيجاد المساحة باستخدام الأضلع المعطاة
مثال:
Input : a = 5, b = 7, c = 8
Output : Area of a triangle is 17.320508
Input : a = 3, b = 4, c = 5
Output : Area of a triangle is 6.000000
يمكن حساب مساحة المثلث باستخدام العلاقة الرياضية التالية:
Area = sqrt(s*(s-a)*(s-b)*(s-c))
تمثل a
و b
و c
أطوال أضلاع المثلث، وs = (a+b+c)/2
.
تنفيذ الخوارزمية
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:
- C++:
#include <bits/stdc++.h>
using namespace std;
float findArea(float a, float b, float c)
{
// يجب أن تكون أطوال الأضلاع قيمًا موجبة
// ويجب أن يكون مجموع طولي أيّ ضلعين أقل من طول الضلع الثالث
if (a < 0 || b < 0 || c < 0 ||
(a + b <= c) || a + c <= b ||
b + c <= a)
{
cout << "Not a valid trianglen";
exit(0);
}
float s = (a + b + c) / 2;
return sqrt(s * (s - a) *
(s - b) * (s - c));
}
// اختبار الدالة السابقة
int main()
{
float a = 3.0;
float b = 4.0;
float c = 5.0;
cout << "Area is " << findArea(a, b, c);
return 0;
}
- بايثون:
# يجب أن تكون أطوال الأضلاع قيمًا موجبة
# ويجب أن يكون مجموع طولي أيّ ضلعين أقل من طول الضلع الثالث
def findArea(a,b,c):
if (a < 0 or b < 0 or c < 0 or (a+b <= c) or (a+c <=b) or (b+c <=a) ):
print('Not a valid trianglen')
return
# حساب نصف المحيط
s = (a + b + c) / 2
# حساب المساحة
area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
print('Area of a traingle is %f' %area)
# الضلع الأول
a = 3.0
# الضلع الثاني
b = 4.0
# الضلع الثالث
c = 5.0
findArea(a,b,c)
- جافا:
class Test
{
static float findArea(float a, float b, float c)
{
// يجب أن تكون أطوال الأضلاع قيمًا موجبة
// ويجب أن يكون مجموع طولي أيّ ضلعين أقل من طول الضلع الثالث
if (a < 0 || b < 0 || c <0 || (a+b <= c) ||
a+c <=b || b+c <=a)
{
System.out.println("Not a valid triangle");
System.exit(0);
}
float s = (a+b+c)/2;
return (float)Math.sqrt(s*(s-a)*(s-b)*(s-c));
}
// اختبار التابع السابق
public static void main(String[] args)
{
float a = 3.0f;
float b = 4.0f;
float c = 5.0f;
System.out.println("Area is " + findArea(a, b, c));
}
}
إيجاد المساحة بواسطة الإحداثيات
إن كانت إحداثيات أركان المثلث متوفّرة، فيمكن تطبيق العلاقة التالية (علاقة رباط الحذاء Shoelace formula) لحساب المساحة:
A = | 1/2 [ (x1y2 + x2y3 + ... + xn-1yn + xny1) - (x2y1 + x3y2 + ... + xnyn-1 + x1yn) ]
تنفيذ الخوارزمية
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:
- C++:
#include <bits/stdc++.h>
using namespace std;
// إحداثيات النقطة i ممثلّة بواسطة ([X[i], Y[i])
double polygonArea(double X[], double Y[], int n)
{
// تهيئة قيمة المساحة
double area = 0.0;
// حساب قيمة علاقة رباط الحذاء
int j = n - 1;
for (int i = 0; i < n; i++)
{
area += (X[j] + X[i]) * (Y[j] - Y[i]);
j = i; // j هو الرأس السابق للمتغير i
}
// تعيد الدالة قيمة مطلقة
return abs(area / 2.0);
}
// اختبار الدالة السابقة
int main()
{
double X[] = {0, 2, 4};
double Y[] = {1, 3, 7};
int n = sizeof(X)/sizeof(X[0]);
cout << polygonArea(X, Y, n);
}
- بايثون:
# إحداثيات النقطة i ممثلّة بواسطة ([X[i], Y[i])
def polygonArea(X,Y, n) :
# تهيئة قيمة المساحة
area = 0.0
# حساب قيمة علاقة رباط الحذاء
j = n - 1
for i in range( 0, n) :
area = area + (X[j] + X[i]) * (Y[j] - Y[i])
j = i # j هو الرأس السابق للمتغير i
# تعيد الدالة قيمة مطلقة
return abs(area // 2.0)
# اختبار الدالة السابقة
X = [0, 2, 4]
Y = [1, 3, 7]
n = len(X)
print(polygonArea(X, Y, n))
- جافا:
import java.io.*;
import java.math.*;
class GFG {
// إحداثيات النقطة i ممثلّة بواسطة ([X[i], Y[i])
static double polygonArea(double X[], double Y[], int n)
{
// تهيئة قيمة المساحة
double area = 0.0;
// حساب قيمة علاقة رباط الحذاء
int j = n - 1;
for (int i = 0; i < n; i++)
{
area += (X[j] + X[i]) * (Y[j] - Y[i]);
// j هو الرأس السابق للمتغير i
j = i;
}
// تعيد الدالة قيمة مطلقة
return Math.abs(area / 2.0);
}
// اختبار التابع السابق
public static void main (String[] args)
{
double X[] = {0, 2, 4};
double Y[] = {1, 3, 7};
int n = X.length;
System.out.println(polygonArea(X, Y, n));
}
}
مصادر
- صفحة Program to find area of a triangle في توثيق الخوارزميات في موقع GeeksforGeeks.