Begriffe vorab
- $fn: Feste Segmentzahl für Kreise und Kugeln (überschreibt $fa und $fs).
- $fa: Mindestwinkel pro Segment in Grad.
- $fs: Mindestlänge eines Segments.
- Fragment: Gerades Teilstück der Kreisannäherung.
- Facette: Kleine ebene Fläche an gekrümmten Körpern.
Kreise sind Vielecke
OpenSCAD zeichnet keine echten Kreise, sondern Vielecke. Wie fein, steuern drei Spezialvariablen mit den Standardwerten $fa = 12 (Grad), $fs = 2 (Einheiten) und $fn = 0. Ist $fn größer als 0, überschreibt es die anderen beiden.
Die Formel
Die Doku gibt die Berechnung als Code an:
int get_line_segments_from_r(double r, double fn, double fs, double fa)
{
if (r < GRID_FINE) return 3;
if (fn > 0.0) return (int)(fn >= 3 ? fn : 3);
return (int)ceil(fmax(fmin(360.0 / fa, r*2*M_PI / fs), 5));
}
Das heißt: Mit $fn gilt exakt dieser Wert (mindestens 3). Ohne $fn nimmt OpenSCAD den kleineren der beiden Werte 360/$fa und Umfang/$fs, mindestens aber 5 Segmente. Beim Standard ergeben sich also höchstens 30 Segmente (360/12).
Empfehlungen der Doku
- Werte über 128 werden nicht empfohlen.
- Werte unter 50 sind für die Leistung ratsam.
- Vielfache von 4 liefern Begrenzungsboxen mit ganzzahligen Achsenmaßen.
Warum Löcher zu klein werden
Das Vieleck liegt innerhalb des idealen Kreises. Ein Loch mit r = 5 hat deshalb an den Seitenmitten einen etwas kleineren Durchmesser. Bei Passungen (Schrauben, Lager) rechnest du das ein: größerer Radius, höheres $fn oder ein Vieleck, das umschließt.
// Gleicher Radius, verschiedene Auflösung
translate([0, 0, 0]) cylinder(h = 5, r = 10); // Standard ($fa=12, $fs=2)
translate([30, 0, 0]) cylinder(h = 5, r = 10, $fn = 8);
translate([60, 0, 0]) cylinder(h = 5, r = 10, $fn = 96);
// Globale Voreinstellung für alles danach
$fn = 48;
translate([90, 0, 0]) sphere(r = 10);
// Loch mit Aufmaß: die Seitenmitten werden sonst zu eng
function aufmass(r, n) = r / cos(180 / n);
echo(aufmass(5, 32)); // ~5.0242
Mit $fn = 8 erkennt man das Achteck deutlich. Die Aufmaßfunktion rechnet vom Radius der Seitenmitten auf den Eckradius um: r / cos(180/n).
Setze $fn nicht pauschal hoch: Für die Vorschau reichen kleine Werte, für den Export erhöhst du gezielt (z. B. in einer Variable).
Zum Selbermachen
- Vergleiche in der Console die Dauer eines Renders mit $fn = 32 und $fn = 128 für eine Kugel.
- Miss den Durchmesser eines Lochs mit $fn = 8 in der Vorschau und vergleiche ihn mit dem Sollwert.
Verwandte Themen
OpenSCAD → Die übrigen Lektionen dieser Themenwelt; Informatik: Grundlagen → „Algorithmen und Berechenbarkeit“ für das Denken in Schritten.
Prüfstatus: Belegt (Stand 1. Oktober 2026): Standardwerte (12, 2, 0), die Fragment-Formel (inkl. Mindestwert 5), die Empfehlungen (über 128 nicht empfohlen, unter 50 ratsam, Vielfache von 4) und die Warnung zu zu kleinen Löchern wurden gegen die Seiten „Other Language Features“ und „Primitive Solids“ geprüft. Alle Codebeispiele dieser Lektion wurden mit OpenSCAD 2026.09.18 (lokale Installation) ausgeführt und liefen ohne Fehler und Warnungen. Nicht einzeln belegt: die Aufmaßformel r / cos(180/n) (eigene geometrische Herleitung, nicht aus der Doku) und der Wert 5,0242. Außerdem nicht einzeln belegt: die Erklärungen in eigenen Worten, die Beispiele als solche (konstruiert) und die Wertungen.
Quellen
- OpenSCAD User Manual – Other Language Features (en.wikibooks.org/wiki/OpenSCAD_User_Manual/Other_Language_Features)
- OpenSCAD User Manual – Primitive Solids (en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids)
- OpenSCAD Cheat Sheet (openscad.org/cheatsheet, bezieht sich auf Version 2021.01)