الفرق بين المراجعتين ل"Algorithms/circle area"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 192: سطر 192:
 
مساحة القطعة = مساحة القطاع - مساحة المثلث OAB
 
مساحة القطعة = مساحة القطاع - مساحة المثلث OAB
  
= <code>pi * r^2 (angle/360)‎</code> - مساحة المثلث OAB<br />لنفترض أنّ الزاوية التي أنشأها القطاع هي <code>X</code>، فبهذا تصبح: ‎<code>∠ AOP = ∠ BOP = X/2</code>‎<source>Cos(X/2) = OP/AO  i.e. OP = AO * Cos(X/2)  
+
= <code>pi * r^2 (angle/360)‎</code> - مساحة المثلث OAB<br />لنفترض أنّ الزاوية التي أنشأها القطاع هي <code>X</code>، فبهذا تصبح: ‎<code>∠ AOP = ∠ BOP = X/2</code>‎<source lang="text">Cos(X/2) = OP/AO  i.e. OP = AO * Cos(X/2)  
 
                       OP = r * Cos(X/2)
 
                       OP = r * Cos(X/2)
 
Sin(X/2) = AP/AO  i.e. AP = AO * Sin(X/2)  
 
Sin(X/2) = AP/AO  i.e. AP = AO * Sin(X/2)  
سطر 212: سطر 212:
  
 
<source lang="text">Area of Segment =  pi * r2 * (angle/360) - 1/2 * r2 * Sin(angle)</source>
 
<source lang="text">Area of Segment =  pi * r2 * (angle/360) - 1/2 * r2 * Sin(angle)</source>
== تنفيذ الخوارزمية ==
+
=== تنفيذ الخوارزمية ===
  
 
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:
 
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:

مراجعة 15:03، 17 نوفمبر 2019

الدائرة هي شكل ثنائي الأبعاد وهو عبارة عن مجموعة من النقاط في المستوى ثنائي الأبعاد والتي تبعد عن نقطة معينة (تسمى مركز الدائرة) بمسافة متساوية (تسمى نصف قطر الدائرة).

مساحة الدائرة

يمكن حساب مساحة الدائرة باستخدام العلاقة الرياضية التالية:

Area = Pi * r * r

تنفيذ الخوارزمية

تعرض الأمثلة التالية طريقة حساب مساحة الدائرة في عدد من لغات البرمجة:

  • C++‎:
#include <iostream> 
const double pi = 3.14159265358979323846; 
using namespace std; 

// تحسب الدالة مساحة الدائرة
float findArea(float r) 
{ 
	return (pi * r * r); 
} 
// اختبار الدالة السابقة
int main() 
{ 
	float r, Area; 
	r = 5; 

	// استدعاء الدالة
	Area = findArea(r); 
	// عرض ناتج الدالة
	cout << "Area of Circle is :" << Area; 
	return 0; 
}
  • بايثون:
def findArea(r): 
	PI = 3.142
	return PI * (r*r); 

# اختبار الدالة السابقة
print("Area is %.6f" % findArea(5));
  • جافا:
class Test 
{ 
	static final double PI = Math.PI; 
		
	static double findArea(int r) 
	{ 
	return PI * Math.pow(r, 2); 
	} 
		
	// اختبار التابع السابق
	public static void main(String[] args) 
	{ 
		System.out.println("Area is " + findArea(5)); 
	} 
}

تعطي الشيفرات السابقة المخرجات التالية:

Area is 78.550000

إيجاد مساحة الدائرة المحيطة بمربع

تحسب هذه الخوارزمية مساحة الدائرة المحيطة بمربع طول ضلعه معلوم.

مثال:

Input : a = 6
Output : Area of a circumscribed circle is : 56.55

Input : a = 4
Output : Area of a circumscribed circle is : 25.13

يمتاز المربع بأن أضلاعه الأربعة متساوية في الطول وأن قياس زواياه الأربعة 90 درجة، وتعرف الدائرة المحيطة بالمربع بأنّها الدائرة التي تمرّ على رؤوس المربع الأربعة.

خصائص الدائرة المحيطة بالمربع

  • يقع مركز الدائرة المحيطة بمربع في نقطة التقاط قطري المربّع.
  • يمكن رسم الدائرة المحيطة بمربع بواسطة رؤوس المربع الأربعة.
  • يتساوى نصف قطري كلّ من الدائرة المحيطة بالمربع والمربع نفسه في الطول.

خطوات الخوارزمية

يمكن استخدام العلاقة الرياضية التالية لحساب مساحة الدائرة المحيطة بالمربع:

(PI * a * a)/2

تمثّل a طول ضلع المربع المحاط بالدائرة، وPI النسبة الثابتة.

يمكن اشتقاق العلاقة السابقة بالطريقة التالية:

مساحة الدائرة = PI * r * r

نصف قطر الدائرة = قطر المربع / 2

ولمّا كان طول قطر المربع = ‎√(2 * a * a)‎

فإنّ نصف قطر الدائرة = ‎√(2 * a * a) / 2‎‎ = ‎√((a * a) / 2)

وبهذا فإن مساحة الدائرة = ‎PI * r * r‎ = ‎(Pi * a * a‎) / 2

تنفيذ الخوارزمية

تعرض الأمثلة التالية طريقة حساب مساحة الدائرة المحيطة بمربع في عدد من لغات البرمجة:

  • C++‎:
#include <stdio.h> 
#define PI 3.14159265 

float areacircumscribed(float a) 
{ 
	return (a * a * (PI / 2)); 
} 

// اختبار الدالة السابقة
int main() 
{ 
	float a = 6; 
	printf(" Area of an circumscribed circle is : %.2f ", 
		areacircumscribed(a)); 
	return 0; 
}
  • بايثون:
PI = 3.14159265

def areacircumscribed(a): 

	return (a * a * (PI / 2)) 

# اختبار الدالة السابقة
a = 6
print(" Area of an circumscribed circle is :", 
		round(areacircumscribed(a), 2))
  • جافا:
import java.io.*; 
class Gfg { 

	static float areacircumscribed(float a) 
	{ 
		float PI = 3.14159265f; 
		return (a * a * (PI / 2)); 
	} 

	// اختبار التابع السابق
	public static void main(String arg[]) 
	{ 
		float a = 6; 
		System.out.print("Area of an circumscribed"
						+ "circle is :"); 
		System.out.println(areacircumscribed(a)); 
	} 
}

إيجاد مساحة قطعة من الدائرة

يقسم الوتر chord الدائرة إلى قسمين يطلق عليهما تسمية القطعة، وتسمى إحدى القطعتين بالقطعة الصغرى (ذات المساحة الصغيرة) والأخرى بالقطعة الكبرى (ذات المساحة الكبيرة).

يعرض الشكل التالي دائرة يقسمها الوتر AB إلى قطعتين:

يمكن حساب مساحة كل قطعة من هاتين القطعتين بمعرفة نصف قطر الدائرة والزاوية التي تشكّل القطعة الصغرى.

مثال:

Input :
radius = 21.0
angle = 120.0
Output :
Area of minor segment 270.855
Area of major segment 1114.59

Input :
radius = 10.0
angle = 90.0
Output :
Area of minor segment 28.5397
Area of major segment 285.619

خطوات الخوارزمية

يُربط طرفا الوتر بمركز الدائرة للحصول على قطاع من الدائرة والذي يضمّ زاوية في مركز الدائرة، ثم يُرسم عمود على الوتر يبدأ من مركز الدائرة، ويمكن ملاحظة أن: ‎∠ AOP = ∠ BOP = 1/2(angle)‎.

يمكن اشتقاق العلاقة الرياضية الخاصة بحساب مساحة قطعة من الدائرة كما يلي:

مساحة القطعة = مساحة القطاع - مساحة المثلث OAB

= pi * r^2 (angle/360)‎ - مساحة المثلث OAB
لنفترض أنّ الزاوية التي أنشأها القطاع هي X، فبهذا تصبح: ‎∠ AOP = ∠ BOP = X/2

Cos(X/2) = OP/AO  i.e. OP = AO * Cos(X/2) 
                       OP = r * Cos(X/2)
Sin(X/2) = AP/AO  i.e. AP = AO * Sin(X/2) 
                       AP = r * Sin(X/2)

وهكذا فإنّ:

القاعدة = AB = AP + PB
          = 2 * AP
          = 2 * r * Sin(X/2)

الارتفاع = OP = r * Cos(X/2)

وبهذا تصبح مساحة المثلث:

Area of triangle = 1/2 * (2 * r * Sin(X/2)) * (r * Cos(X/2))
                    = 1/2 * r2 * Sin(X) 
                      [Using identity 2 * Sin(A) * Cos(A)]
                    = Sin(2 * A))

وتساوي مساحة القطعة:

Area of Segment =  pi * r2 * (angle/360) - 1/2 * r2 * Sin(angle)

تنفيذ الخوارزمية

تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:

  • C++‎:
#include <bits/stdc++.h> 
using namespace std; 

float pi = 3.14159; 

float area_of_segment(float radius, 
					float angle) 
{ 
	// حساب مساحة القطاع
	float area_of_sector = pi * 
						(radius * radius) 
						*(angle / 360); 

	// حساب مساحة المثلث
	float area_of_triangle = (float)1 / 2 * 
							(radius * radius) * 
							sin((angle * pi) / 180); 

	return area_of_sector - area_of_triangle; 
} 

// اختبار الدالة السابقة
int main() 
{ 
	float radius = 10.0, angle = 90.0; 
	cout << "Area of minor segment = "
		<< area_of_segment(radius, angle) << endl; 

	cout << "Area of major segment = "
		<< area_of_segment(radius, (360 - angle)); 
}
  • بايثون:
import math 

pi = 3.14159

def area_of_segment(radius, angle): 
	# حساب مساحة القطاع
	area_of_sector = pi *
					(radius * radius) 
					* (angle / 360) 

	# حساب مساحة المثلث
	area_of_triangle = 1 / 2 *
					(radius * radius) *
					math.sin((angle * pi) / 180) 

	return area_of_sector - area_of_triangle; 


# اختبار الدالة السابقة
radius = 10.0
angle = 90.0
print("Area of minor segment =", 
	area_of_segment(radius, angle)) 
print("Area of major segment =", 
	area_of_segment(radius, (360 - angle)))
  • جافا:
class GFG { 
static float pi = 3.14159f; 

static float area_of_segment(float radius, 
							float angle) 
{ 
	// حساب مساحة القطاع
	float area_of_sector = pi * 
(radius * radius) * (angle / 360); 

	// حساب مساحة المثلث
	float area_of_triangle = 
		(float)1 / 2 * (radius * radius) * 
		(float)Math.sin((angle * pi) / 180); 

	return area_of_sector - area_of_triangle; 
} 

// اختبار التابع السابق
public static void main(String[] args) 
{ 
	float radius = 10.0f, angle = 90.0f; 
	System.out.println("Area of minor segment = " + 
					area_of_segment(radius, angle)); 

	System.out.println("Area of major segment = " + 
					area_of_segment(radius, (360 - angle))); 
} 
}

مصادر