Laden...

Bézierkurve

Erstellt von vbtricks vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.465 Views
vbtricks Themenstarter:in
205 Beiträge seit 2006
vor 16 Jahren
Bézierkurve

Salut,

ich möchte eine Bézierkurve zeichnen. Dafür gibt es zwar die DrawBezier-Methode der Graphics-Klasse, allerdings möchte ich zusätzlich die gezeichnete Linie mit fortlaufender Länge verjüngen (sprich die Linie wird immer dünner).

Jetzt hatte ich im Web gelesen, dass ich mir von der GraphicsPath-Klasse die Zwischenpunkte berechnen lassen können soll. Ein Beispiel dafür habe ich leider nicht gefunden und mein Probecode funktioniert auch nicht:


Point[] myPoints = {new Point(0,0), new Point(100,100), new Point(200,0)};
Byte[] myTypes = {(byte)System.Drawing.Drawing2D.PathPointType.Bezier,
     (byte)System.Drawing.Drawing2D.PathPointType.Bezier,
     (byte)System.Drawing.Drawing2D.PathPointType.Bezier};

System.Drawing.Drawing2D.GraphicsPath a =
    new System.Drawing.Drawing2D.GraphicsPath(myPoints, myTypes);
a.Flatten();

Wenn es sich vermeiden lassen könnte, würde ich gerne auf die Durcharbeitung der ganzen Theorie in der Wikipedia verzichten...

Kann mir da jemand weiterhelfen?

Danke im Voraus,

Stefan

1.271 Beiträge seit 2005
vor 16 Jahren

Hallo vbtricks,

Warum funktioniert dein Code nicht? Für mich ist das alles korrekt. Du müsstest jetzt per a.PathPoints deine berechneten Zwischenpunkte auslesen können.
Oder bekommst du irgendeinen Fehler?

Gruß,
Thomas

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

vbtricks Themenstarter:in
205 Beiträge seit 2006
vor 16 Jahren

Salut,

wenn ich


foreach (PointF curPoint in a.PathPoints)
{
    MessageBox.Show(curPoint.ToString());
}

nach Flatten ausführe, erhalte ich eine Exception "Parameter invalid".

Stefan

vbtricks Themenstarter:in
205 Beiträge seit 2006
vor 16 Jahren

Salut,

es müssen mindestens exakt Punkte sein, dann funktioniert's.

Stefan