حساب النقاط المحيطة لمنطقة "قطعة فطيرة" و "المناطق الفرعية"

StackOverflow https://stackoverflow.com/questions/931807

  •  06-09-2019
  •  | 
  •  

سؤال

خلفية:

كنت ألعب مؤخرا مع GDI + لرسم "قرص" يعرض تغيير اللون الشامل من خلال 360 درجة. (لقد حفرت بعض HSL إلى رمز RGB للحلاقة من خلال HSL (1،1،1) -> HSL (360،1،1))

فيما يتعلق بالقرص، قمت أولا بوجودة دائرة صلبة كاملة باستخدام ما ورد أعلاه، ثم دائرة ثانية باللون الرمادي عبر الوسط لإعطاء ما يلي

alt text

لذلك كل هذا غرامة ... لكنني أدركت أن 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.

alt text

الروابط لمصادر الرياضيات على ما يرام لكن لدي جوجل سريعة وننظر إلى 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.

نصائح أخرى

أتمنى أن يساعدك هذا. يوفر الجزء الثاني طريقة لحساب مساحة قطاع الدائرة

http://www.wikihow.com/calculate-the-area-of-a-circle.

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

(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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top