حساب النقاط المحيطة لمنطقة "قطعة فطيرة" و "المناطق الفرعية"
سؤال
خلفية:
كنت ألعب مؤخرا مع GDI + لرسم "قرص" يعرض تغيير اللون الشامل من خلال 360 درجة. (لقد حفرت بعض HSL إلى رمز RGB للحلاقة من خلال HSL (1،1،1) -> HSL (360،1،1))
فيما يتعلق بالقرص، قمت أولا بوجودة دائرة صلبة كاملة باستخدام ما ورد أعلاه، ثم دائرة ثانية باللون الرمادي عبر الوسط لإعطاء ما يلي
لذلك كل هذا غرامة ... لكنني أدركت أن GDI + عازلة لنا من الكثير من المباراة الصعبة التي تسير هنا عن طريق FillPie
طريقة. أيضا، FillPie
يتطلب منك تزويد مستطيل محيط للفطيرة بدلا من طول دائرة نصف قطرها. كما أنه يقوم بملء شريحة كاملة ولا يسمح لك بتحديد جزء من هذا القطاع فقط.
سؤال:
هل يمكن لأي شخص أن يوجهني في اتجاه بعض وظائف الرياضيات أو إعطاء أي تفسير بشأن المنتدى الذي أحتاج لحساب النقاط عن المنطقة ومؤثرة "المنطقة الشاملة الخضراء" التالية
Point `c` - an x,y co-ordinate
Angle `A` - an angle from horizontal
Angle `B - an angle from horizontal where `B` - `A` == the sweep angle
Length `r` - a distance from `c`
Length `r2` - a distance from `c` where `r2` - `r` == the `height` of the segment to be filled.
الروابط لمصادر الرياضيات على ما يرام لكن لدي جوجل سريعة وننظر إلى Wolfram Math ويمكن أن أجد ما كنت أبحث عنه. أيضا، إذا كان هناك طريقة لتوليد سلسلة من الحدود (x، y) المشترك أو والتي يمكن تمريرها ك Point[]
للرسومات .fillygon، سيكون ذلك رائعا أيضا.
المحلول
المنطقة هي اختلاف أجزاء القرص الخارجي والداخلية. تتناسب مساحة جزء القرص مع عملية الاجتياح الزاوية:
area = (b-a)*((r+r2)^2-r^2)/2
a
و b
يجب التعبير عنها في الراديان. بالنسبة b-a = 2*Pi
, area = Pi*(r+r2)^2 - Pi*r^2
هو الفرق في مناطق الأقراص الخارجية والداخلية.
يمكنك إنشاء نقاط على الدائرة الداخلية / الخارجية باستخدام
x = cx + r * cos(t) / x = cx + (r+r2) * cos(t)
y = cy + r * sin(t) / y = cy + (r+r2) * sin(t)
أين t
يختلف من a
ل b
.
نصائح أخرى
أتمنى أن يساعدك هذا. يوفر الجزء الثاني طريقة لحساب مساحة قطاع الدائرة
مساحة قطعة من الدائرة هي ببساطة زاوية القوس (في الرضيات) مرات دائرة نصف قطرها. لذلك من الواضح أن مساحة الدائرة الخضراء:
(B-A) * r2
تحتاج إلى رسم خطوط (هذا الرمز الزائفي):
for aa from A to B
set color to required color // you could use aa in an equation with HSL to get something like your sample
x1=r*cos(aa)+x
y1=r*sin(aa)+y
x2=r1*cos(aa)+x
y2=r1*sin(aa)+y
draw line between (x1,y1) and (x2,y2)
لزيادة صغيرة بما يكفي في الزوايا، والصغيرة بما يكفي radii، يجب أن يكون هذا موافق.
النقاط التي تبحث عنها هي (X1 و Y1) و (X2 و Y2) لكل زاوية AA