Skip Navigation Links
About
Products
Downloads
Contact
Tutorial
Dokumentation
OpenGl für Android
 
Skip Navigation Links
Hallo Welt
Texturen
Mathematik
Abbildungen
Animationen
Kurven
Surfaces
Licht & Farben
Text
Camera
Schatten

Kurven

Zweidimensionale Kurven sind mathematisch Abbildungen von R |--> R X R,
dreidimensionale Kurven Abbildungen von R |--> R X R X R.

Zweidimensionale Kurven

In Drawing 3d sind zweidimensionale Kurven stets Abbildungen von
Intervall [0,1] |--> RXR
So beschreibt die Abbildung
x = R*Cos(2*PI*t);
y = R*Cos(2*PI*t);
einen Kreis mit Radius R. 2*PI*t mappt das Intervall [0,1] auf das Intervall [0,2*PI]

Userdefinierte Kurven

Der Drawing 3D Grundtyp, von dem alle Kurven abstammen ist Curve. Curve besitzt eine Menge von Methoden und Eigenschaften, die wir später anschauen werden. Im Augenblick brauchen wir lediglich das Event OnGetValue. Wir definieren eine globale Klasse CustomCurve vom Type Curve. Im OnGetValue-Ereignis definieren wir unsere Funktion z.B.:

xy CustomCurve_OnGetValue(object sender, double t)
{
    t = (t-0.5) * 2.5; // Map from [0,1].
    return new xy(4*(t * t - 1),4* t * (t * t - 1));
        
}


In der OnPaintMethode zeichnen wir die Kurve mit PenWidth=2:
 void Device_OnPaint(object sender, EventArgs e)
        {
            Device.PenWidth = 2;
            Device.drawCurve(CustomCurve);
            Device.PenWidth = 1;
        }
Hier der c# Code:

Und so siehts aus:

  Ich habe in diesem Programm das Achsenkreuz hinzugeschwindelt. CoordinateAxes ist eine Klasse in Drawing3d.Editors. Es wird eine Instanz CoordinateAxes erzeugt und der Parent wird auf Device.Work gesetzt. Diese Art der Darstellung werden wir später noch kennen lernen.

Vordefinierte Kurven

Die im vorigen Abschnitt besprochene CustomCurve hat einige Makel. Da die Ableitung nicht definiert ist, funktionieren einige Methoden nicht, wie z.B.: CustomCurve.Parallel(Width), das einen parallelen Polygonzug liefert.
Zwar ist GetA (Anfangspunkt ) und GetB (Endpunkt) definiert durch Value(0) bzw. Value(1) aber ein Setzen des Anfangs- und des Enpunktes ist ebenfalls nicht möglich.

Drawing 3d enthält folgende Klassen von Kurven:

  • Line: Eine gerade Linie zwischen A und B
  • Arc: Kreisbogen
  • Bezier: Eine kubische Bezierkurve
  • QSpline: Quadratischer Spline mit A, B, einem Kontrollunkt und einem Gewicht.
  • BSpline: Mit Kontrollpunkten und Knoten
  • Nurbs2d: BSpline mit Gewichten.

Im folgenden c# Beispiel werden diese Kurven dargstellt.


und so siehts aus


Wer mehr über die Theorie der Splines wissen möchte findet dies z.B.: bei Wikipedia.
In unserem Beispiel haben Nurbs und BSpline die selben Kontollpunkte. Der Grad der BSplinekurve ist 2, jener der Nurbskurve gleich 3. Nurbs haben zu sätzlich Gewichte ( eine Art Magnetismus zu den Kontrollpunkten hin ).


 // Initialization of MyBspline & MyNurbs
            xyArray ControlPoints = new xyArray(10);
            ControlPoints[0] = new xy(0, 0);
            ControlPoints[1] = new xy(0.25, 3 / 3f);
            ControlPoints[2] = new xy(3 / 3f, 5 / 3f);
            ControlPoints[3] = new xy(4 / 3f, 1 / 3f);
            ControlPoints[4] = new xy(5 / 3f, 0);
            ControlPoints[5] = new xy(7 / 3f, 0);
            ControlPoints[6] = new xy(8 / 3f, -1 / 3f);
            ControlPoints[7] = new xy(9 / 3f, 3 / 3f);
            ControlPoints[8] = new xy(10 / 3f, 5 / 3f);
            ControlPoints[9] = new xy(11 / 3f, 1 / 3f);
            // Interpolationdegree
            MyBSpline.Degree = 2;
            MyBSpline.ControlPoints = ControlPoints;
            // The same Controlpoints for MyNurbs
            MyNurbs.ControlPoints = ControlPoints;
            // Interpolationdegree
            MyNurbs.Degree = 3;
            MyNurbs.Weights = new double[] { 1, 0.3, 1, 0.2, 4, 1, 1.3, 1, 2, 1 };
Wer mehr über die Theorie der Splines wissen möchte findet dies z.B.: bei Wikipedia.





 
Copyright © Drawing3D inc