2011-04-29 2 views
0

J'ai quelques difficultés à ressentir l'espace entre deux courbes dans un graphique cartésien dans mon programme WinForms.Remplissez l'espace entre deux courbes dans le graphique cartésien

Basicly J'ai deux courbes que je les dessiner sur un bitmap en utilisant cette méthode:

public Bitmap DrawEnvelope(PointF[] u, PointF[] d) 
    { 
     g = Graphics.FromImage(box); 
     g.SmoothingMode = SmoothingMode.AntiAlias; 
     g.PixelOffsetMode = PixelOffsetMode.HighQuality; 

     Pen pengraph = new Pen(Color.FromArgb(50, 0 ,0 ,200), 1F); 
     pengraph.Alignment = PenAlignment.Center; 

     g.DrawCurve(pengraph, u, 0); //uperline 
     g.DrawCurve(pengraph, d, 0); //downline 

     g.Dispose(); 

     return box; 
    } 

Maintenant, je veux remplir l'espace entre ces deux courbes avec une couleur. Comment cela peut-il être fait?

J'ai regardé dans MSDN et trouvé une méthode comme FillClosedCurve. mais ça ne m'aide pas dans ce cas.

Merci.

résolu par le commentaire de Akh

 joinedCurves.AddRange(u); 
     joinedCurves.AddRange(d.Reverse()); 

     PointF[] fillPoints = joinedCurves.ToArray(); 
     SolidBrush fillBrush = new SolidBrush(Color.FromArgb(50, 0, 0, 200)); 
     FillMode newFillMode = FillMode.Alternate; 

     g.FillClosedCurve(fillBrush, fillPoints, newFillMode, 0); 
+0

Pourquoi ne fonctionne pas de FillClosedCurve pour vous? Je pense que si vous appelez FillClosedCurve avec l'ensemble des points incurvés supérieurs suivis par les points incurvés inférieurs dans l'ordre inverse donc (x = 1 ... 10 pour la courbe supérieure puis x = 10 ... 1 pour la courbe inférieure) FillClosedCurve vous donnera le résultat souhaité. Vous dessinez ensuite les courbes individuellement comme vous le faites déjà. – Akh

+0

@Akh Ouais ça marche en partie mais ça relie la fin de la ligne supérieure au début de la ligne de fond et ça a l'air horrible! Comment puis-je faire de la ligne supérieure et de la ligne inférieure une courbe fermée? ils ne sont pas fermés pour le moment et sont deux courbes séparées. –

+0

@Ach ok ok j'ai eu l'idée que je devais inverser la courbe vers le bas! Merci! –

Répondre

1
List<PointF> joinedCurves = new List<PointF>(); 
joinedCurves.AddRange(u);   
jointCurves.AddRange(d.Reverse());  
PointF[] fillPoints = joinedCurves.ToArray();  
SolidBrush fillBrush = new SolidBrush(Color.FromArgb(50, 0, 0, 200));  
FillMode newFillMode = FillMode.Alternate;  
g.FillClosedCurve(fillBrush, fillPoints, newFillMode, 0); 
Questions connexes