Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

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)] });

3 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!

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.

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