Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo
Einsteigertipps Profitipps Probleme & Abstürze Themensammlungen Newsletter & Feed Alle Artikel Blog unterstützen
Newsletter RSS Feed Google+
Wichtige Beiträge der letzten Tage

20.10.2012

Möbius Band mit Autodesk Design Script

Ich habe heute versucht, mittels DesignScript in AutoCAD ein Möbius Band zu zeichnen und habe einiges gelernt:

  1. Ich hab keine Ahnung mehr von Mathematik ;)
  2. DesignScript stürzt (bei mir) oft ab
  3. DesignScript ist äußerst mächtig!
  4. DesignScript macht Spaß, wenn man sich reingefuchst hat

Hier das Ergebnis bis jetzt. Die letzte Flächenerhebung klappt bei mir nicht, wohl weil sich Start und Ende der Linien gegenüber liegen und ich habe jetzt auch keine Lust mehr, da weiter daran rumzumachen...

image

Und so sieht das Script aus:

import("ProtoGeometry.dll"); 
import("Math.dll");

num_pts = 100;

s = 20;
t = 0..360..#num_pts;
R = 100;

x = (R + s * (Math.Cos(t / 2))) * (Math.Cos(t));
y = (R + s * (Math.Cos(t / 2))) * (Math.Sin(t));
z = s * Math.Sin(t / 2);

p1 = Point.ByCoordinates(x, y, z);

int_curve = BSplineCurve.ByControlVertices(p1,1);
int_curve.Color = Color.ByARGB(255, 0, 0, 255);


s2 = -20;
t2 = t;
R2 = R;

x2 = (R2 + s2 * (Math.Cos(t2 / 2))) * (Math.Cos(t2));
y2 = (R2 + s2 * (Math.Cos(t2 / 2))) * (Math.Sin(t2));
z2 = s2 * Math.Sin(t2 / 2);

p2 = Point.ByCoordinates(x2, y2, z2);
//x = print(x,y,z);

int_curve2 = BSplineCurve.ByControlVertices(p2,1);
int_curve2.Color = Color.ByARGB(255, 0, 255, 0);

l[1..num_pts] = Line.ByStartPointEndPoint(p1, p2);

loft = Surface.LoftFromCrossSections({ l[1..(num_pts-1)] });

Kommentare:

  1. Optimierte Version (Danke an Luke!):

    import("ProtoGeometry.dll");
    import("Math.dll");
    num_pts = 100;
    s = 20;
    t = 0..360..#num_pts;
    R = 100;

    x = (R + s * (Math.Cos(t / 2))) * (Math.Cos(t));
    y = (R + s * (Math.Cos(t / 2))) * (Math.Sin(t));
    z = s * Math.Sin(t / 2);
    p1 = Point.ByCoordinates(x, y, z);
    int_curve = BSplineCurve.ByControlVertices(p1,1);
    int_curve.Color = Color.ByARGB(255, 0, 0, 255);

    s2 = s * -1;
    t2 = t;
    R2 = R;

    x2 = (R2 + s2 * (Math.Cos(t2 / 2))) * (Math.Cos(t2));
    y2 = (R2 + s2 * (Math.Cos(t2 / 2))) * (Math.Sin(t2));
    z2 = s2 * Math.Sin(t2 / 2);
    p2 = Point.ByCoordinates(x2, y2, z2);
    //x = print(x,y,z);
    int_curve2 = BSplineCurve.ByControlVertices(p2,1);
    int_curve2.Color = Color.ByARGB(255, 0, 255, 0);
    l= Line.ByStartPointEndPoint(p1, p2);
    loft = Surface.LoftFromCrossSections({ l[0..num_pts - 2], l[1..num_pts - 1] });

    AntwortenLöschen
  2. Und die Version von Gile um die Splines bereinigt und die Punkte über eine Funktion erweitert!

    import("ProtoGeometry.dll");
    import("Math.dll");

    num_pts = 100;
    s = 20;
    t = 0..360..#num_pts;
    R = 100;

    def pts(s : double)
    {
    x = (R + s * (Math.Cos(t / 2))) * (Math.Cos(t));
    y = (R + s * (Math.Cos(t / 2))) * (Math.Sin(t));
    z = s * Math.Sin(t / 2);
    return = Point.ByCoordinates(x, y, z);
    }

    l = Line.ByStartPointEndPoint(pts(s), pts(-s));
    loft = Surface.LoftFromCrossSections({ l[0..num_pts - 2], l[1..num_pts - 1] });

    AntwortenLöschen
  3. Das gute alte Möbius Band.
    Schönes Beispiel.

    - Peter Mehrtens

    AntwortenLöschen

War der Beitrag hilfreich oder hast du eine Ergänzung dazu?
Ist noch eine Frage offen?
Ich freue mich auf deine Rückmeldung!

Related Posts Plugin for WordPress, Blogger...
Inventor FAQ Newsletter. Emailadresse: