الفرق بين المراجعتين لصفحة: «Algorithms/check point on sector»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التحقق من وجود نقطة معينة في قطاع الدائرة}}</noinclude> تتحقق هذه الخوارزمية من وجود...'
 
لا ملخص تعديل
سطر 2: سطر 2:
تتحقق هذه الخوارزمية من وجود النقطة المعطاة في قطاع الدائرة، وذلك بافتراض أن مركز الدائرة يقع في نقطة الأصل (0,0). مدخلات الخوارزمية هي زاوية بداية قطاع الدائرة وحجم القطاع كنسبة مئوية.
تتحقق هذه الخوارزمية من وجود النقطة المعطاة في قطاع الدائرة، وذلك بافتراض أن مركز الدائرة يقع في نقطة الأصل (0,0). مدخلات الخوارزمية هي زاوية بداية قطاع الدائرة وحجم القطاع كنسبة مئوية.


أمثلة:
'''أمثلة:'''


<source lang="text">Input :  Radius = 8  
<source lang="text">Input :  Radius = 8  
سطر 17: سطر 17:
Output : Point (3, 4) does not exist in  
Output : Point (3, 4) does not exist in  
         the circle sector</source>
         the circle sector</source>
== خطوات الخوارزمية ==
زاوية بداية القطاع هي <code>0</code> درجة، ونصف القطر هو <code>r</code> والنسبة المئوية للجزء الملون هي ‎12%. يمكن حساب زاوية نهاية القطاع بواسطة العلاقة:
زاوية بداية القطاع هي <code>0</code> درجة، ونصف القطر هو <code>r</code> والنسبة المئوية للجزء الملون هي ‎12%. يمكن حساب زاوية نهاية القطاع بواسطة العلاقة:


سطر 22: سطر 24:
يمكن التحقق من وجود نقطة ذات الإحداثيات <code>(x,y)</code> في قطاع دائرة (مركزها نقطة الأصل) بحساب الإحداثيات القطبية لتلك النقطة ثم المرور عبر الخطوات السابقة:
يمكن التحقق من وجود نقطة ذات الإحداثيات <code>(x,y)</code> في قطاع دائرة (مركزها نقطة الأصل) بحساب الإحداثيات القطبية لتلك النقطة ثم المرور عبر الخطوات السابقة:


# تحويل النقطتين <code>x, y</code> إلى الإحداثيات القطبية باستخدام العلاقتين التاليتين:
1- تحويل النقطتين <code>x, y</code> إلى الإحداثيات القطبية باستخدام العلاقتين التاليتين:


<source lang="text">Angle = atan(y/x);
<source lang="text">Angle = atan(y/x);
Radius = sqrt(x * x + y * y);</source>
Radius = sqrt(x * x + y * y);</source>2 - يجب أن تكون الزاوية المحسوبة بين زاوية بداية المقطع وزاوية نهايته، وأن يكون نصف القطر المحسوب بين <code>0</code> ونصف قطر الدائرة.
# يجب أن تكون الزاوية المحسوبة بين زاوية بداية المقطع وزاوية نهايته، وأن يكون نصف القطر المحسوب بين <code>0</code> ونصف قطر الدائرة.


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



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

تتحقق هذه الخوارزمية من وجود النقطة المعطاة في قطاع الدائرة، وذلك بافتراض أن مركز الدائرة يقع في نقطة الأصل (0,0). مدخلات الخوارزمية هي زاوية بداية قطاع الدائرة وحجم القطاع كنسبة مئوية.

أمثلة:

Input :  Radius = 8 
         StartAngle = 0 
         Percentage = 12 
         x = 3 y = 4 
Output : Point (3, 4) exists in the circle 
         sector

Input : Radius = 12 
        Startangle = 45
        Percentage = 25  
        x = 3 y = 4 
Output : Point (3, 4) does not exist in 
         the circle sector

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

زاوية بداية القطاع هي 0 درجة، ونصف القطر هو r والنسبة المئوية للجزء الملون هي ‎12%. يمكن حساب زاوية نهاية القطاع بواسطة العلاقة:

360/النسبة المئوية + زاوية البداية

يمكن التحقق من وجود نقطة ذات الإحداثيات (x,y) في قطاع دائرة (مركزها نقطة الأصل) بحساب الإحداثيات القطبية لتلك النقطة ثم المرور عبر الخطوات السابقة:

1- تحويل النقطتين x, y إلى الإحداثيات القطبية باستخدام العلاقتين التاليتين:

Angle = atan(y/x);
Radius = sqrt(x * x + y * y);

2 - يجب أن تكون الزاوية المحسوبة بين زاوية بداية المقطع وزاوية نهايته، وأن يكون نصف القطر المحسوب بين 0 ونصف قطر الدائرة.

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

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

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

void checkPoint(int radius, int x, int y, float percent, 
										float startAngle) 
{ 
	// حساب زاوية نهاية القطاع
	float endAngle = 360/percent + startAngle; 

	// حساب الإحداثيات القطبية
	float polarradius = sqrt(x*x+y*y); 
	float Angle = atan(y/x); 

	// التحقق من أن نصف القطر القطبي أقل من نصف قطر الدائرة
	// والتحقق من أنّ الزاوية المحسوبة تقع بين زاويتي بدء القطاع ونهاية القطاع
	if (Angle>=startAngle && Angle<=endAngle && polarradius<radius) 
		printf("Point (%d, %d) exist in the circle sector\n", x, y); 
	else
		printf("Point (%d, %d) does not exist in the circle sector\n", x, y); 
} 

// اختبار الدالة السابقة
int main() 
{ 
	int radius = 8, x = 3, y = 4; 
	float percent = 12, startAngle = 0; 
	checkPoint(radius, x, y, percent, startAngle); 
	return 0; 
}
  • بايثون:
import math 

def checkPoint(radius, x, y, percent, startAngle): 

	# حساب زاوية نهاية القطاع
	endAngle = 360 / percent + startAngle 

	# حساب الإحداثيات القطبية 
	polarradius = math.sqrt(x * x + y * y) 
	Angle = math.atan(y / x) 

	# التحقق من أن نصف القطر القطبي أقل من نصف قطر الدائرة
	# والتحقق من أنّ الزاوية المحسوبة تقع بين زاويتي بدء القطاع ونهاية القطاع
	if (Angle >= startAngle and Angle <= endAngle 
						and polarradius < radius): 
		print("Point (", x, ",", y, ") "
			"exist in the circle sector") 
	else: 
		print("Point (", x, ",", y, ") "
			"does not exist in the circle sector") 

# Driver code 
radius, x, y = 8, 3, 4
percent, startAngle = 12, 0

checkPoint(radius, x, y, percent, startAngle)
  • جافا:
class GFG 
{ 
static void checkPoint(int radius, int x, int y, float percent, 
										float startAngle) 
{ 

	// حساب زاوية نهاية القطاع
	float endAngle = 360/percent + startAngle; 

	// حساب الإحداثيات القطبية 
	double polarradius = Math.sqrt(x*x+y*y); 
	double Angle = Math.atan(y/x); 

	// التحقق من أن نصف القطر القطبي أقل من نصف قطر الدائرة
	// والتحقق من أنّ الزاوية المحسوبة تقع بين زاويتي بدء القطاع ونهاية القطاع
	if (Angle>=startAngle && Angle<=endAngle && polarradius<radius) 
		System.out.print("Point"+"("+x+","+y+")"+ 
		" exist in the circle sector\n"); 
	else
		System.out.print("Point"+"("+x+","+y+")"+ 
		" exist in the circle sector\n"); 
} 

// اختبار التابع السابق
public static void main(String arg[]) 
{ 
	int radius = 8, x = 3, y = 4; 
	float percent = 12, startAngle = 0; 
	checkPoint(radius, x, y, percent, startAngle); 
} 
}

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

Point(3, 4) exists in the circle sector
Time complexity = O(1)

مصادر