Federgraph 2023

Zuletzt aktualisiert am 20.05.2023.

Achtung, neues Projekt: Federgraph, in seiner Eigenschaft als Skulptur, soll gebaut werden! Dabei kann der Maßstab verändert werden, sowie für die einzelnen Schichten:

Als Farbe kann hier auch die spezielle Ausstrahlung eines bestimmten Materials gelten. Dreimal dürfen Sie raten, warum die Farbe wichtig ist, bzw. warum es sinnvoll sein könnte, die Skulptur aus mehreren Teilen zusammenzusetzen.

Federgraph in 3D Viewer

Die Applikation FC103 (Bild weiter unten im Text) kann Mesh-Daten im .obj Format exportieren, welche mit Doppelklick in die Microsoft App 3D-Viewer geladen werden können, siehe Bild oben und unten.

Federgraph mesh

Die Skulptur könnte auch aus nur einem einzigen Mesh bestehen, dann wird es aber schwieriger mit den Farben. Wenn aus Porzellan gefertigt, dann müsste die Figur von Hand bemalt werden.

Vorteil: Bei Verwendung von mehreren Schichten kann jede einzelne Schicht optimiert werden, zum Beispiel durch die Verwendung des jeweils am besten geeigneten Mesh-Builder-Typs.

Die Kombination von unterschiedlichen Mesh-Builder Typen ist die Grundlage für das neue Projekt. Der bisher verwendete Typ ist allgemein verwendbar und wurde zuletzt verbessert, andere wurden für die spezielle Situation entwickelt.

Eine neue Linie in der Entwicklung betrifft den Mesh-Builder. Unabhängig vom verwendeten Mesh-Builder Typ ist aber die Formel für die Berechnung der z-Koordinaten der Vertices immer die gleiche.

Sie können die Theorie überspringen und direkt zur Download-Seite wechseln. Dort wird es schneller konkret. Die folgenden Abschnitte enthalten Hintergrund-Informationen zum Thema.

Bild mit nur einer Feder

Für eine einzelne Feder mit linearer Kennlinie ergibt sich die folgende Situation:

Diagramm für eine Feder

Das ist sicherlich keine Überraschung.

Bei einer Zusammenschaltung von mehreren Federn würde sich das dreidimensionale Bild aus der Überlagerung von mehreren eingestülpten Kegeln ergeben.

Die Funktion z = f (x, y) ist fast überall stetig und differenzierbar, das ist sehr gut. Es ist die Anwendung der Absolut-Funktion, die harte Kanten oder Spitzen erzeugt, und für Probleme verantwortlich ist. Es kann sinnvoll sein, bestimmte Berechnungen mit der Funktion durchzuführen, bei der die Absolutwert-Bildung noch nicht vorgenommen wurde.

Natürlich gibt es 3D-Bilder basierend auf dem Modell mit nur einer Feder. Wenn zum Beispiel die Befestigungspunkte von mehreren Federn auf die gleichen Koordinaten eingestellt werden, dann sieht es so aus, als ob nur eine einzelne Ersatz-Feder im Spiel ist, und es erscheint in der Tat ein Kegel, wenn man die Kraft plottet, siehe App.

Modell mit drei Federn

Das der Rechnung zu Grunde liegende Modell hat drei Federn. Jede Feder hat zwei Enden, ein fixes Ende und ein bewegliches Ende. Es handelt sich prinzipiell um ein räumliches Modell.

Die Koordinaten der drehbar gelagerten Endpunkte sind immer dreidimensional. Der Zeichnung unten kann entnommen werden, dass l1 die Länge von Feder 1 im unbelasteten Zustand ist.

Federgraph mesh

Die freien Enden der Federn werden in Punkt P verbunden, welcher in der Ebene z = 0 bewegt wird:

Federgraph mesh

Für jeden Punkt P in der Ebene können nun die Kräfte in den einzelnen Federn ermittelt werden, und anschließend auch die resultierende Kraft, die erforderlich ist, um das System im Punkt P im Gleichgewicht zu halten. Die Zeichnung oben soll zeigen, dass die tatsächliche Länge von Feder 1 mit t1 bezeichnet wird. Das ist wichtig für die Interpretation der Formel.

Formel

Die Federgraph Formel ist immer noch gültig.

Jedoch wurden, für die Skulptur, die konkreten Werte nochmal leicht verändert.

procedure TFederEquationSpecial.Reset;
begin
  x1 := -64.95;
  x2 := 64.95;
  x3 := 0;

  y1 := 37.5;
  y2 := 37.5;
  y3 := -75;

  z1 := 0;
  z2 := 0;
  z3 := 0;

  l1 := 90;
  l2 := 90;
  l3 := 90;

  k1 := 1;
  k2 := 1;
  k3 := 1;

  fcap := 500000;
end;

Die Entscheidung bezüglich der konkreten Werte für die Parameter ist also gefallen. Jedoch hat sich gezeigt, dass es noch Bedarf gibt zu erläutern, wie die Formel ursprünglich hergeleitet wurde.

Dazu ist es mit einiger Sicherheit am besten, sich als erstes ansehen, wie die resultierende Kraft, herrührend von den drei Federn, berechnet oder konstruiert werden kann.

Betrag der resultierende Kraft, Variante 1

Es geht relativ einfach, wenn man vorhandene Typen wie zum Beispiel TPoint3D verwendet. Man denke sich TPoint3D als Vektor.

function TFederEquationSpecial.GetForceValue(x, y: single): single;
var
  P1, P2, P3, P: TPoint3D; // ein TPoint3D ist ein 3D Vektor.
  F1, F2, F3: single;
  R1, R2, R3: TPoint3D;
  FV1, FV2, FV3, FV: TPoint3D;
begin
  P1 := TPoint3D.Create(x1, y1, z1);
  P2 := TPoint3D.Create(x2, y2, z2);
  P3 := TPoint3D.Create(x3, y3, z3);
  P := TPoint3D.Create(x, y, 0);

  { t1, l1, k1: single; // declared at class level }

  t1 := (P-P1).Length;
  t2 := (P-P2).Length;
  t3 := (P-P3).Length;

  { Kraft in Feder, Druckkraft ist negativ }
  F1 := k1 * (t1 - l1);
  F2 := k2 * (t2 - l2);
  F3 := k3 * (t3 - l3);

  { Richtung der Kraft in Feder, Einheitsvektor }
  R1 := (P - P1).Normalize;
  R2 := (P - P2).Normalize;
  R3 := (P - P3).Normalize;

  { Force Vector, negative Kraft bewirkt Richtungsumkehr }
  FV1 := F1 * R1;
  FV2 := F2 * R2;
  FV3 := F3 * R3;

  { man denke an den Kräfteplan }
  FV := FV1 + FV2 + FV3;

  { Rückgabewert der Funktion ist der Betrag der Kraft, immer positiv }
  result := FV.Length;
end;

Natürlich ist es interessant die Stellen zu kennen, wo die resultierende Kraft Null wird. Hier wird aber nur der skalare Wert berechnet, an der Stelle P, um später als z-Koordinate im Mesh verwendet zu werden, wenn der Betrag der resultierenden Kraft, geplottet über der Ebene, im Bild dargestellt werden soll.

Betrag der resultierende Kraft, Variante 2

Die klassische Variante, ohne Vektoren, folgt.

procedure TFederEquationSpecial.InitT(x, y: single);
begin
  a1 := sqr(x-x1) + sqr(y-y1);
  a2 := sqr(x-x2) + sqr(y-y2);
  a3 := sqr(x-x3) + sqr(y-y3);

  t1 := sqrt(a1 + sqr(z1));
  t2 := sqrt(a2 + sqr(z2));
  t3 := sqrt(a3 + sqr(z3));
end;

function TFederEquationSpecial.ResultierendeKraft(x, y: single): single;
var
  F1, F2, F3: single;
  bf: single;
begin
  InitT(x, y);

  F1 := k1 * (t1 - l1); // Kraft in Feder 1, Druckkraft ist negativ
  F2 := k2 * (t2 - l2);
  F3 := k3 * (t3 - l3);

  u1 := F1 * (x-x1) / t1; // F1 * x-Komponente von Richtung
  u2 := F2 * (x-x2) / t2;
  u3 := F3 * (x-x3) / t3;

  v1 := F1 * (y-y1) / t1;
  v2 := F2 * (y-y2) / t2;
  v3 := F3 * (y-y3) / t3;

  w1 := F1 * (z-z1) / t1;
  w2 := F2 * (z-z2) / t2;
  w3 := F3 * (z-z3) / t3;

  u := u1 + u2 + u3;
  v := v1 + v2 + v3;
  w := w1 + w2 + w3;

  bf := sqrt(sqr(u) + sqr(v) + sqr(w)); // Betrag F

  result := bf;
end;

Punkt P wird zwangsgeführt in der Ebene.

Wir interessieren uns daher hauptsächlich für die horizontalen Komponenten, diese werden in den Gleichgewichtslagen zu Null. Da hier im speziellen Fall auch alle Befestigungspunkte in Ebene z = 0 liegen, kann die Berechnung noch vereinfacht werden.

function TFederEquationSpecial.ResultierendeKraftH(x, y: single): single;
var
  F1, F2, F3: single;
  bf: single;
begin
  { Spezialfall, alle Befestigungspunke liegen in Ebene z = 0, w entfällt }

  InitT(x, y);

  F1 := k1 * (t1 - l1); // Kraft in Feder 1, Druckkraft ist negativ
  F2 := k2 * (t2 - l2);
  F3 := k3 * (t3 - l3);

  u1 := F1 * (x-x1) / t1; // F1 * Richtungs-Cosinus
  u2 := F2 * (x-x2) / t2;
  u3 := F3 * (x-x3) / t3;

  v1 := F1 * (y-y1) / t1;  // F1 * Richtungs-Sinus
  v2 := F2 * (y-y2) / t2;
  v3 := F3 * (y-y3) / t3;

  u := u1 + u2 + u3;
  v := v1 + v2 + v3;

  bf := sqrt(sqr(u) + sqr(v)); // Betrag der horizontalen Komponente von F

  result := bf;
end;

Der zurückgegebene Wert bf in der Funktion oben ist der Betrag der horizontalen Komponente der resultierenden Kraft.

Im nachfolgenden Bild sind die Kräfte eingetragen:

Federgraph 2D

Es kann verschiedene Gründe geben, warum das Koordinaten-System in der Praxis abweichend definiert wird. FC103 kann die berechneten Koordinaten auf verschiedene Weise ausgeben, optimiert für Blender oder 3D Viewer, oder nativ. Eine Anpassung an den Bedarf der importierenden Anwendung sollte kein Problem sein.

Und jetzt nochmal zurück zur Formel

Die Seite mit der Federgraph Formel sollte jetzt etwas einfacher zu interpretieren sein, insbesondere wenn man zunächst den Unterschied zur Berechnung des Betrages der resultierenden Kraft feststellt.

Hinweis: Man multipliziere mit t1 * t2 * t3 und man lasse auch noch einiges weg, warum auch immer. Es kann trotzdem noch ein Bild erzeugt werden.

Natürlich kann man den Betrag der resultierenden Kraft auch direkt plotten, mit Plot 4 bei Verwendung der im Store veröffentlichten App. Die entsprechenden Bilder für spezielle Situationen wurden bereits an anderer Stelle diskutiert.

Federgraph FC94 Plot 4

2D Grafik

Relative neu ist, dass Höhenlinien berechnet, interaktiv dargestellt, und auch als svg Grafik exportiert werden können. Beispiel folgt.

Eine Gruppe von Höhenlinien kann im Prinzip für jede beliebige Höhe berechnet werden. Mehrere Gruppen von Höhenlinien können auch gemeinsam, in einer einzelnen dxf-Datei zusammengefasst, exportiert werden.

Im Bild unten ist zu sehen, dass DWG TrueView von Autodesk die dxf-Daten erfolgreich importieren konnte. Jede Höhenlinie bzw. jede Gruppe von Linien auf gleicher Höhe hat seine eigene Ebene und kann damit separat angezeigt und auch separat gedruckt werden, zum Beispiel maßstabsgerecht in eine PDF-Datei. Mit Druck auf transparente Folie erhält man eine Lehre für die Überprüfung der später zu fertigenden Teile.

dxf - Pfad Daten, importiert in TrueView

Nur auf Ebene 1 liegt keine Höhenlinie, sondern das Dreieck der Befestigungspunkte und der Rahmen, der die Achsen des Koordinaten-Systems enthält.

Nachdem dxf-Höhenlinien importiert wurden, ist zu überprüfen, ob der Maßstab stimmt, und dass der y-Offset von 30 mm korrekt eingestellt wurde. Mit anderen Worten, der Ursprung der Zeichnung sollte verschoben werden. Die Lage eines automatisch ermittelten Koordinaten-Ursprungs sollte überprüft und gegebenenfalls korrigiert werden.

Auf ein Blatt A4 gedruckt befindet sich der Ursprung der Figur also nicht in der Mitte des Blattes, sondern 30 mm darunter.

Anhand des mit gedruckten Rahmens kann der Maßstab leicht überprüft werden.

Wenn ein Teil maschinell ausgeschnitten oder ausgefräst werden soll, dann wäre es sinnvoll, die Lage des Koordinaten-Ursprungs geeignet anzugeben, so dass die gefertigten Teile überprüft werden können und auch positioniert und orientiert werden können, und mit benachbarten Teilen verbunden werden können. Genau an dieser Stelle beginnt die gestalterische Freiheit.

3D Mesh-Daten

Ein 3D Teil entsteht dadurch, dass die 3D Fläche an mindestens einer Höhenposition geschnitten wird.

Bei einzelnen 3D Teilen, deren Mesh-Daten (Stützstellen und Dreiecke, vertices and triangles) als .obj Datei exportiert werden können, wäre zu überlegen, ob die beiden Deckel (die Schnittflächen) oben und unten mit ausgegeben werden sollen, oder ob das importierende Programm den Abschluss selbst machen möchte.

3D RingPart Objekt

Die durch Schnitte entstehenden Teile werden intern als Slice, Ring, RingGroup oder RingPart bezeichnet. RingPart ist ein zusammengesetztes Objekt, welches die beiden Deckel an Bord hat, siehe Vordergrund im Bild oben.

Ob man durch einen Schnitt eine RingGroup erhält oder nur einen Ring hängt von der Schnittposition ab.

Nachdem eine .obj Datei mit mehreren Objekten in Blender importiert wurde, kann man Teile löschen, so dass nur noch das zu fertigende Teil in der Szene verbleibt.

Federgraph in Blender

Die Bezeichnung der Teile folgt einem Muster.

ID-MeshType-CapValue-SliceHeight-Mode-Color

Der Mesh-Typ wird mit einem einzelnen Buchstaben wie folgt kodiert:

function TRingInfo.MeshTypeToChar(mt: TMeshType): string;
begin
  case mt of
    Shape: result := 'E'; // Extruded Shape
    Ring: result := 'R';
    RingGroup: result := 'G';
    Slice: result := 'S';
    SliceUpper: result := 'U'; // nicht verwendet
    SliceLower: result := 'L'; // nicht verwendet
    SliceTop: result := 'T';
    Roof: result := 'A';
    SlicePart: result := 'X';
    RingPart: result := 'Y';
    else result := '-';
  end;
end;

Wenn das gleiche Bild mehrfach erscheint, dann ist das kein Problem, es wird nur einmal vom Server geladen. Hier also das gleiche Bild nochmal, um es im Blick zu behalten. Federgraph importiert nach Blender

01-G-80-10-0-Cornflowerblue
04-S-50-11-0-Lime
10-G-28-8-4-Aqua
21-A-4-4-0-White
22-S-4-4-0-White
23-S-4-4-0-White

CapValue sollte immer positiv sein. CapValue = 80 im Maßstab 1:1 passt noch auf ein Blatt A4.

0 < CapValue < 80

SliceHeight muss für MeshType = Slice einen Mindestwert aufweisen. Das Problem entsteht bei der Optimierung. Eine Scheitelpunkt (Vertex) kann nur einmal korrigiert werden, für einen bestimmten z-Wert, und niemals für mehrere z-Werte gleichzeitig. Je dünner die Teile, desto höher muss daher die Auflösung sein, um Fehler zu vermeiden. Die Fehler treten auf, wo die Funktion steil verläuft. Ein 11 mm dickes Teil sollte fast immer funktionieren. Ein nur 10 mm dickes Teil könnte bereits Problemstellen haben.

Es gibt z-Positionen für die zwingend ein Slice-Mesh verwendet werden muss. Dies ist der Fall, wo die 3D Fläche ein Minimum oder Maximum hat wie beim Tiefpunkt der Augen, oder wo sich Sattelpunkte befinden, also zum Beispiel zwischen Hand und Auge.

Ansonsten ist es wahrscheinlich immer besser eine Ring-Gruppe als Mesh-Typ zu verwenden. Ganzzahlwert Mode bezeichnet die Nummer eines einzelnen geschlossenen Pfades in der Höhenliniengruppe, die für die Erzeugung einer RingGroup verwendet wird.

Ob Links nicht eigentlich Rechts ist, könnte diskutiert werden, wurde aber bereits festgelegt.

Roof, bzw. das Dach, ist ein Mesh-Typ der speziell für den Abschluss der Pyramide verwendet wird. Es sei erwähnt, dass das Dach zwei Sattelpunkte enthält, das Kreuz des Nordens, und das Kreuz des Südens. Obwohl es anders aussieht, handelt es sich um Sattelpunkte, wo die Tangentenfläche an die Oberfläche horizontal verläuft bzw. wo diese eine vertikale Normale hat. Die Punkte, die so aussehen, als ob sich dort zwei Höhenlinien kreuzen, sind auf alle Fälle interessant, auch bezüglich der Fertigung.

Federgraph in 3D Viewer

Die Hände sind auch speziell, sie sind normalerweise nach innen geklappt, durch die Absolut-Funktion, können aber auch nach außen geklappt werden. Im Bild oben sind die Hände nach außen geklappt. In diesem Fall kann die Skulptur nicht mehr satt flach auf die Nase gelegt werden, es sei denn, man erzwingt es mit Nachbearbeitung.

Wenn die beiden Hände als separate Slice-Mesh Teile ausgebildet werden, dann lässt sich die Auflösung speziell für diese Teile erhöhen, und sie könnten aus einem abweichenden Material gefertigt werden.

Die Herstellung der oberen Teile, welche die Null-Ebene berühren, gilt als schwieriger im Vergleich zum Teil mit CapValue = 80.

Lizenz erforderlich

Die Befreiung des Projektes steht noch aus.

Alle Teile, wie hier beschrieben, dürfen ausschließlich in limitierter Auflage gefertigt werden, nachdem zuvor eine Lizenz erworben wurde.

Test-Daten für die Entwicklung finden Sie auf der Download-Seite.

Demo

Die ersten gefertigten Teile sind Prototypen bzw. Demo-Objekte. Es sind die Fertigungs-Technologien, die zu demonstrieren sind, anhand des Entwurfs.

Varianten der zu produzierenden Skulptur könnten im nächsten Jahr auf der Messe gezeigt werden, eventuell von verschiedenen Herstellern, in individueller Ausführung.

Selbstverständlich darf man darauf hoffen, das der Wert der geschaffenen Werke steigt, in etwa synchron mit dem Erfolg des Projektes, welches im Bereich STEM verankert ist, und geeignet erscheint, mit dem Bereich Bildung verbunden zu werden.

Vergleichen Sie Federgraph mit anderen dreidimensionalen, mathematisch definierten Figuren, die es schon zur Berühmtheit gebracht haben, und lassen Sie das Auge des Betrachters entscheiden.

Friedenstaube (Version 2.0.20.23)

Taube 02

Federgraph kann verschiedene Formen annehmen, je nachdem welche Formel-Variante ausgewählt wird, zum Beispiel Plot 7 (Taube) an Stelle von Plot 10 (Federgraph).

Skript

Der Aufbau der Skulptur aus einzelnen Teilen kann mit einer Ring-Liste definiert werden. Eine Ring-Liste enthält TRingInfo Elemente. FC103 enthält eine kleine Auswahl fix definierter Beispiele, die mit Button-Click geladen werden können.

Eine Ring-Liste kann auch als Text-Datei bereitgestellt oder vom Memo gelesen werden. Die Text-Form einer Ring-Liste wird dann zunächst in die interne Variante einer Ring-Liste umgewandelt (geparst), und anschließend normal geladen wie die Beispiele.

Eine aktuell im Programm geladene Szene kann als Ring-Listen-Text im Memo auszugeben werden, so dass man ein Beispiel erhält, wie eine Ring-Liste aussehen sollte.

RingList Text

Der Text im Memo könnte herauskopiert, verändert und als .text Datei über das Drop-Target wieder gelesen werden.

type
  TExportCoords = (
    Native,
    App_Blender,
    App_3D_Viewer,
    App_3D_Printer
  );

  TMeshType = (
    Unknown,
    Shape,
    Ring,
    RingGroup,
    Slice,
    SliceUpper,
    SliceLower,
    SliceTop,
    Roof,
    SlicePart,
    RingPart
  );

  TMaterialType = (
    ColorMat,
    SimpleMat,
    LightMat,
    FederMat,
    RingMat,
    BodyMat,
    EyeMat,
    HandMat
  );

  TRingInfo = record
    Color: TAlphaColor;
    CapValue: single;
    SliceHeight: single;
    WantPolyTrim: Boolean;
    WantMoreDetail: Boolean;
    WantSideCaps: Boolean;

    OpenMesh: Boolean;
    TextureJack: Boolean;

    Mode: Integer;
    SubdivisionsH: Integer;

    MeshSize: Integer;
    MeshType: TMeshType;
    MaterialType: TMaterialType;

    IsHand: Boolean;
    IsLeftHand: Boolean;
    IsFlippedHand: Boolean;
    SkipHands: Boolean;

    // code omitted
  end;

Kleinere Anpassungen werden erforderlich sein, zum Beispiel wenn Teile etwas größer gefertigt, und die Höhe später nachbearbeitet werden soll, oder wenn die Genauigkeit noch weiter hochgeschraubt werden soll.

Nach Laden einer veränderten Liste muss in FC103 nur noch der Export-Button gedrückt werden, um eine .obj Datei zu exportieren.

Federgraph in 3D Viewer

Damit eine importierte .obj Datei farbig angezeigt werden kann, muss eine Text-Datei federgraph-material.mtl im gleichen Ordner liegen. Diese Datei enthält alle standardisierten Web-Farben und wird mitgeliefert.