Zusammenfassung
// Diese Routine erstellt ein Fillet zwischen zwei beliebigen Formen. // Es funktioniert, indem jede Form um eine gewisse Distanz erweitert wird und dann eine sehr dünne Hülle um diese erweiterten Formen erstellt wird. Diese beiden Hüllen werden dann überschnitten, um einen Punkt entlang des Fillets zu erhalten. Die Abstände werden so gewählt, dass für zwei Formen, die im rechten Winkel überschneiden, diese Schnittpunkte auf einem Viertelkreis lie
// Der hull()-Befehl wird dann verwendet, um zwei benachbarte Schnittpunkte zusammenzufügen, wodurch das Filet erstellt wird.
// Diese Methode hat zwei Nebenwirkungen:
// Das Filet ist nicht bündig mit den beiden Formen, sondern ragt um eine kleine Menge von dr=0.005 heraus, der Dicke der Schalen, die zur Erzeugung der Schnittpunkte verwendet wurden.
// Zweitens erzeugt diese Routine eine Beule an den Stellen, an denen sich die beiden ursprünglichen Formen überlappen. Wie in Beispiel 5 und Beispiel 6 dargestellt. Diese überschüssige Beule muss von Hand getrimmt werden.
// Manchmal ist es auch möglich, diese überschüssige Ausbuchtung durch eine kluge Wahl der Formen zu vermeiden. Jedes überschüssige Filet muss dann durch eine dritte Form ausgeblendet werden. Dies wird in Beispiel 7 veranschaulicht.
//
// Die Form des Fillets ist nur kreisförmig für die Überschneidung von geraden Formen unter einem rechten Winkel. Wenn die Kante der Formen nicht gerade ist (z. B. Fillet zwischen zwei Kreisen), ist das Fillet nicht ganz kreisförmig und hat einen anderen (ungefähren) Filletradius als angegeben. Für geradkantige Formen unter einem beliebigen Winkel tritt ein ähnlicher Effekt auf.
//
// Die Routine fillet_display() zeigt die beiden ursprünglichen Formen in Rot und Grün an. Sie werden um 0,01 in Z-Richtung verschoben, um Z-Buffer-Kollisionen bei der Anzeige mit F5 zu vermeiden. Diese Verschiebung in Z-Richtung hat keinen Einfluss auf das Ergebnis von F6, da F6 ein rein zweidimensionales Ergebnis ist. Das Fillet wird in Gelb(isch) angezeigt.
//
// Der Parameter fn_mink=16 gibt die Rundheit des Kreises an, der zum Erweitern der Formen und zum Erstellen der Schalen verwendet wird. Eine Erhöhung führt zu sehr langen Berechnungszeiten. Er kann auf so niedrig wie 4 (oder sogar 3) eingestellt werden, um Berechnungszeit zu sparen, führt aber dann zu leicht asymmetrischen Filleten.
//
// Der Parameter dr=0.005 gibt die Dicke der Schalen um die expandierten Formen an. Wenn man diesen Parameter auf noch kleinere Zahlen einstellt, dann wird keine Schnittstelle zwischen den Schalen berechnet und es wird überhaupt kein Fillet generiert.
//
//Die Rechenzeit steigt drastisch (exponentiell?) mit der Anzahl der Facetten der Formen an. Eine Lösung wäre, die Expand- und Shell-Routinen zu ersetzen. Zum Beispiel könnte die Expand-Routine durch wiederholtes Verschieben der Form um dr durchgeführt werden, jedoch jedes Mal in eine etwas andere Richtung, und alle verschobenen Formen würden anschließend zusammengefügt.
//
//Diese Arbeit wurde inspiriert durch den ausgezeichneten Bericht über Filets von Cake Baby inhttp://sozvyezdami.wordpress.com/2013/04/10/3d-fillet-algorithm-prototype.
Tags
Modellquelle
