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

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:حساب مساحة الدائرة}}</noinclude>
+
<noinclude>{{DISPLAYTITLE: مساحة الدائرة}}</noinclude>
 
يمكن حساب مساحة الدائرة باستخدام العلاقة الرياضية التالية:<syntaxhighlight lang="text">
 
يمكن حساب مساحة الدائرة باستخدام العلاقة الرياضية التالية:<syntaxhighlight lang="text">
 
Area = Pi * r * r
 
Area = Pi * r * r
سطر 62: سطر 62:
  
 
<source lang="text">Area is 78.550000</source>
 
<source lang="text">Area is 78.550000</source>
 +
 +
== إيجاد مساحة الدائرة المحيطة بمربع ==
 +
 +
تحسب هذه الخوارزمية مساحة الدائرة المحيطة بمربع طول ضلعه معلوم.
 +
 +
مثال:
 +
 +
<source lang="text">Input : a = 6
 +
Output : Area of a circumscribed circle is : 56.55
 +
 +
Input : a = 4
 +
Output : Area of a circumscribed circle is : 25.13</source>
 +
يمتاز المربع بأن أضلاعه الأربعة متساوية في الطول وأن قياس زواياه الأربعة 90 درجة، وتعرف الدائرة المحيطة بالمربع بأنّها الدائرة التي تمرّ على رؤوس المربع الأربعة.
 +
 +
== خصائص الدائرة المحيطة بالمربع ==
 +
 +
* يقع مركز الدائرة المحيطة بمربع في نقطة التقاط قطري المربّع.
 +
* يمكن رسم الدائرة المحيطة بمربع بواسطة رؤوس المربع الأربعة.
 +
* يتساوى نصف قطري كلّ من الدائرة المحيطة بالمربع والمربع نفسه في الطول.
 +
 +
== خطوات الخوارزمية ==
 +
 +
يمكن استخدام العلاقة الرياضية التالية لحساب مساحة الدائرة المحيطة بالمربع:
 +
 +
<source lang="text">(PI * a * a)/2</source>
 +
تمثّل <code>a</code> طول ضلع المربع المحاط بالدائرة، و<code>PI</code> النسبة الثابتة.
 +
 +
يمكن اشتقاق العلاقة السابقة بالطريقة التالية:
 +
 +
مساحة الدائرة = <code>PI * r * r</code>
 +
 +
نصف قطر الدائرة = قطر المربع / 2
 +
 +
ولمّا كان طول قطر المربع = ‎<code>√(2 * a * a)‎</code>‎
 +
 +
فإنّ نصف قطر الدائرة = ‎<code>√(2 * a * a) / 2‎</code>‎ = ‎<code>√((a * a) / 2)</code>‎
 +
 +
وبهذا فإن مساحة الدائرة = ‎<code>PI * r * r</code>‎ = ‎<code>(Pi * a  * a‎) / 2</code>‎
 +
 +
== تنفيذ الخوارزمية ==
 +
 +
تعرض الأمثلة التالية طريقة حساب مساحة الدائرة المحيطة بمربع في عدد من لغات البرمجة:
 +
 +
* C++‎:
 +
 +
<source lang="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;
 +
}
 +
</source>
 +
* بايثون:
 +
 +
<source lang="python">PI = 3.14159265
 +
 +
def areacircumscribed(a):
 +
 +
return (a * a * (PI / 2))
 +
 +
# اختبار الدالة السابقة
 +
a = 6
 +
print(" Area of an circumscribed circle is :",
 +
round(areacircumscribed(a), 2)) </source>
 +
* جافا:
 +
 +
<source lang="java">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));
 +
}
 +
} </source>
 +
 +
== إيجاد مساحة قطعة من الدائرة ==
 +
 +
يقسم الوتر chord الدائرة إلى قسمين يطلق عليهما تسمية القطعة، وتسمى إحدى القطعتين بالقطعة الصغرى (ذات المساحة الصغيرة) والأخرى بالقطعة الكبرى (ذات المساحة الكبيرة).
 +
 +
يعرض الشكل التالي دائرة يقسمها الوتر <code>AB</code> إلى قطعتين:
 +
 +
يمكن حساب مساحة كل قطعة من هاتين القطعتين بمعرفة نصف قطر الدائرة والزاوية التي تشكّل القطعة الصغرى.
 +
 +
'''مثال:'''
 +
 +
Input : <br />
 +
radius = 21.0<br />
 +
angle = 120.0<br />
 +
Output :<br />
 +
Area of minor segment 270.855<br />
 +
Area of major segment 1114.59
 +
 +
Input :<br />
 +
radius = 10.0<br />
 +
angle = 90.0<br />
 +
Output : <br />
 +
Area of minor segment 28.5397<br />
 +
Area of major segment 285.619
 +
 +
== خطوات الخوارزمية ==
 +
 +
يُربط طرفا الوتر بمركز الدائرة للحصول على قطاع من الدائرة والذي يضمّ زاوية في مركز الدائرة، ثم يُرسم عمود على الوتر يبدأ من مركز الدائرة، ويمكن ملاحظة أن ‎<code>∠ AOP = ∠ BOP = 1/2(angle)</code>‎.
 +
 +
مساحة القطعة = مساحة القطاع - مساحة المثلث <code>OAB</code><br />
 +
  = pi * r^2 (angle/360) - مساحة المثلث <code>OAB</code><br />
 +
<br />
 +
لنفترض أنّ الزاوية التي أنشأها القطاع هي <code>X</code>، فبهذا تصبح: ‎<code>∠ AOP = ∠ BOP = X/2</code>‎
 +
 +
<source lang="">مساحة المثلث  = ‎`1/2 * base * height`‎
 +
                    = 1/2 * AB * OP
 +
 +
اعتمادًا على قوانين علم المثلثات، فإنّ
 +
 +
```text
 +
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)</source>
 +
وهكذا فإنّ:
 +
 +
<source lang="text">القاعدة = `AB = AP + PB`
 +
          = 2 * AP
 +
          = 2 * r * Sin(X/2)
 +
 +
الارتفاع = ‎`OP = r * Cos(X/2)`‎</source>
 +
وبهذا تصبح مساحة المثلث:
 +
 +
<source lang="text">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))</source>
 +
وتساوي مساحة القطعة:
 +
 +
<source lang="text">Area of Segment =  pi * r2 * (angle/360) - 1/2 * r2 * Sin(angle)</source>
 +
== تنفيذ الخوارزمية ==
 +
 +
تعرض الأمثلة التالية طريقة تنفيذ الخوارزمية في عدد من لغات البرمجة:
 +
 +
* C++‎:
 +
 +
<source lang="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));
 +
}
 +
</source>
 +
* بايثون:
 +
 +
<source lang="python">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)))
 +
</source>
 +
* جافا:
 +
 +
<source lang="java">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)));
 +
}
 +
} </source>
 +
 +
 +
 
* صفحة [https://www.geeksforgeeks.org/c-program-find-area-circle/ Program to find area of a circle] في توثيق الخوارزميات في موقع GeeksforGeeks.
 
* صفحة [https://www.geeksforgeeks.org/c-program-find-area-circle/ Program to find area of a circle] في توثيق الخوارزميات في موقع GeeksforGeeks.
 +
* صفحة [https://www.geeksforgeeks.org/area-circumscribed-circle-square/ Area of a Circumscribed Circle of a Square] في توثيق الخوارزميات في موقع GeeksforGeeks.
 +
* صفحة [https://www.geeksforgeeks.org/program-find-area-circular-segment/ Program to find area of a Circular Segment] في توثيق الخوارزميات في موقع GeeksforGeeks.
 +
  
 
[[تصنيف: الخوارزميات]]
 
[[تصنيف: الخوارزميات]]
 
[[تصنيف: الخوارزميات الهندسية]]
 
[[تصنيف: الخوارزميات الهندسية]]

مراجعة 13:19، 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

مساحة المثلث  = ‎`1/2 * base * height`‎
                     = 1/2 * AB * OP

اعتمادًا على قوانين علم المثلثات، فإنّ

```text
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))); 
} 
}