Navigationslinks überspringen  
Navigationslinks überspringen

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*Sin(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:
  public override void OnPaint()
        {
           base.OnPaint();
           PolygonMode = PolygonMode.Line;
           Axis.Paint(this);
           PenWidth = 2;
           drawCurve(CustomCurve);
           PenWidth = 1;
        }
Hier der c# Code:

Und so siehts aus:

  Ich habe in diesem Programm das Achsenkreuz hinzugeschwindelt. CoordinateAxes ist eine Klasse in Drawing3d.Entities. Es wird eine Instanz Axis erzeugt und in der Paintmethode gezeichnet.

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
  • Ellipse: Ellipse
  • Bezier: Eine kubische Bezierkurve
  • QSpline: Quadratischer Spline mit A, B, einem Kontrollunkt und einem Gewicht.
  • BSpline: Mit Kontrollpunkten und Knoten
  • Nurbs2d: BSpline mit Gewichten.
  • Circle3D: 3D Kreis bzw. Kreisbogen.
  • Line3D: 3D Gerade
  • Nurbs3d: Nurbs in 3D
  • BSpline3d: BSpline in 3D
  • SurfaceCurve: Kurve auf einem Surface, deren Parameter durch eine 2D-curve gegeben sind

Im folgenden c# Beispiel werden die 2D 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