Berechnen der Begrenzungspunkte für den Bereich einer „Tortenstück“ und „Unterbereiche“

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

  •  06-09-2019
  •  | 
  •  

Frage

Hintergrund :

Ich war vor kurzem das Spiel mit GDI + eine „Disc“ ziehen einen weiten Farbwechsel um 360 Grad anzeigt. (Ich grub einige HSL zu RGB-Code in einer Schleife durch HSL bis (1,1,1) -> HSL (360,1,1))

In Bezug auf die Scheibe, zog ich zuerst einen vollen festen Kreis der oben mit, und dann wird ein zweiter Kreis in Grau über dem Mittelpunkt der folgenden geben

alt text

Also das ist alles in Ordnung ... aber ich erkennen, dass GDI + isolierend uns von vielen des schwierigen Spiel, das hier los ist durch die FillPie Methode. Auch FillPie erfordert, dass Sie ein Begrenzungsrechteck für den Kuchen zu liefern, wie zu einem Radius Länge gegenüber. Es ist auch ein komplettes Segment füllen und doesnt können Sie nur einen Teil dieses Segments angeben.

Frage:

Kann mir jemand zeigen in die Richtung einiger Mathematische Funktionen oder eine Erklärung geben, was forumla ich brauchen würde, um die Gegend & Plotpunkte der folgenden „Green Filled Area“ gegeben berechnen:

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

Links zu Math Quellen sind in Ordnung, aber ich habe ein schnell Google & bei Wolfram Math aussehen mußte und konnte das finden, was ich suchte. Auch, wenn es eine Möglichkeit war eine Folge von begrenzenden (x, y) Co-oder den zu erzeugen, die als Point[] zu Graphics.FillPolygon weitergegeben werden konnten, das wäre cool zu.

War es hilfreich?

Lösung

Die Fläche ist die Differenz der äußeren und inneren Scheibenteile. Die Fläche eines Scheibenteils ist proportional zur Winkel Kröpfung:

area = (b-a)*((r+r2)^2-r^2)/2

a und b muss in Radiant ausgedrückt werden. Für b-a = 2*Pi, area = Pi*(r+r2)^2 - Pi*r^2 ist die Differenz der Flächen der äußeren und inneren Scheiben.

Sie können Punkte auf dem inneren / äußeren Kreis erzeugen mit

x = cx + r * cos(t)     /     x = cx + (r+r2) * cos(t)
y = cy + r * sin(t)     /     y = cy + (r+r2) * sin(t)

Wo t variiert von a b.

Andere Tipps

Hoffe, das hilft. Der zweite Teil stellt ein Verfahren zur Berechnung der Fläche eines Sektors eines Kreises

http://www.wikihow.com/Calculate-the -Bereichs-of-a-Kreis

Die Fläche eines Segments eines Kreises ist einfach der Winkel des Bogens (in Radiant) mal der Radius ist. So ist der Bereich des grünen Kreises ist offensichtlich:

(B-A) * r2

Sie müssen Linien zeichnen (dieser Pseudo-Code):

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)

für einen Klein genug Zuwachs in den Winkeln und kleine Radien genug, dies sollte in Ordnung sein.

Die Punkte Sie suchen sind (x1, y1) und (x2, y2) für jeden Winkel aa

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top