home *** CD-ROM | disk | FTP | other *** search
- # Warning!
- #
- # The code is _ugly_. I mean it. Don't read if not pressed to.
-
- resolution = 15;
-
- neck = 0.2;
- rneck = 0.18;
- neck2 = 0.35;
- bbrk = 0.6;
- bprebrk = 0.05;
- preneck = 0.15;
- pprebrk = 0.07;
- pbrk = 0.4;
- helrad = 0.02;
-
- bbase = 0.07 :
- bbase2 = 0.05 :
- bnarrow = 0.025 :
- bheight = 0.5 :
- bnheight = 0.4 :
- bupper = 0.04 :
-
- p_ent = FUNCTION() : t :
- curve = NIL() :
- FOR (t = 0, pprebrk / 24 , pprebrk / 2,
- curve = curve + LIST(CTLPT(E3, sqrt(sqrt(t)) * rneck / sqrt(sqrt(pprebrk / 2)) / 2.5, 0, t))) :
- FOR (t = 2 * pprebrk / 3, pprebrk / 9, pprebrk,
- curve = curve + LIST(CTLPT(E3, sqrt(sqrt(t)) * rneck / sqrt(sqrt(pprebrk)), 0, t))) :
- return = CBSPLINE(2, curve, LIST(KV_OPEN)) ;
-
- p_neck = FUNCTION() : t :
- curve = NIL() :
- FOR (t = pprebrk, (pbrk - pprebrk) / 4, pbrk,
- curve = curve + LIST(CTLPT(E3, rneck, 0, t))) :
- return = CBSPLINE(2, curve, LIST(KV_OPEN)) ;
-
- p_top = FUNCTION(upto) : t :
- curve = NIL() :
- FOR (t = pbrk, (upto - pbrk) / 2, upto,
- curve = curve + LIST(CTLPT(E3, rneck + (t - pbrk) * (neck2 - rneck) * 7, 0, t))) :
- return = CBSPLINE(2, curve, LIST(KV_OPEN)) ;
-
- b_ent = FUNCTION() : t : cr :
- cr = NIL() :
- FOR (t = 0, bprebrk / 2.5, bprebrk,
- cr = cr + LIST(CTLPT(E3, preneck + t * (neck - preneck) / bprebrk, 0, t))) :
- return = cr ;
-
- b_neck = FUNCTION() : t : cr :
- cr = NIL() :
- FOR (t = bprebrk, (bbrk - bprebrk) / 2.5, bbrk,
- cr = cr + LIST(CTLPT(E3, neck + (t - bprebrk) * (neck2 - neck) / (bbrk - bprebrk), 0, t))) :
- return = cr ;
-
- b_sph = FUNCTION(upto) : t : x : z : cr :
- cr = NIL() :
- FOR (t = bbrk, (upto - bbrk) / 8, upto,
- z = upto - (sqr(upto - t)) / (upto - bbrk) :
- x = 0.25 - sqr((upto - 0.5) - z) :
- if (x < 0, x = 0, x = sqrt(x)) :
- cr = cr + LIST(CTLPT(E3, x, 0, z))) :
- return = cr ;
-
- bubble_curve = FUNCTION(upto) :
- b_list = b_ent() + b_neck() + b_sph(upto) :
- return = CBSPLINE(3, b_list, LIST(KV_OPEN)) ;
-
- plug_curve = FUNCTION(upto) : step : curve : t :
- return = p_ent() + p_neck() + p_top(upto) ;
-
- bubble = FUNCTION() : bb :
- bb = SURFPREV(bubble_curve(1.35)) :
- COLOR(bb, WHITE) :
- ATTRIB(bb, "transp", 0.95) :
- return = bb ;
-
- bottle_bottom = FUNCTION(width, width2, upto) : cr : t :
- cr = NIL() :
- FOR (t = 0, upto / 6, upto * 5 / 6,
- cr = cr + LIST(CTLPT(E3, width + (width2 - width) * t / upto, 0, t))) :
- return = cr ;
-
- bottle_narrow = FUNCTION(from, width, upto) : cr : t :
- cr = NIL() :
- FOR (t = from, (upto - from) / 6, from + (upto - from) * 5 / 6,
- cr = cr + LIST(CTLPT(E3, width, 0, t))) :
- return = cr ;
-
- bottle_upper = FUNCTION(from, width) : cr : t : height :
- height = 0.05 :
- cr = NIL() :
- FOR (t = from, height / 4, from + height,
- cr = cr + LIST(CTLPT(E3, width, 0, t))) :
- return = cr ;
-
- bottle_curve = FUNCTION() : cr :
- cr = bottle_bottom(bbase, bbase2, bnheight) + bottle_narrow(bnheight, bnarrow, bheight) + bottle_upper(bheight, bupper) :
- return = CBSPLINE(3, cr, LIST(KV_OPEN)) ;
-
- mustasche = FUNCTION() : m1 : m2 : m3 : m4 : m5 : circ1 : circ2 :
- circ1 = CIRCLE(VECTOR(0, 0, 0), 0.005) :
- circ2 = CIRCLE(VECTOR(0, 0, 0), 0.003) :
- m1 = LIST(SWEEPSRF(circ1,
- CBSPLINE(2,
- LIST(CTLPT(E3, -bbase2, 0, bnheight * 5 / 6),
- CTLPT(E3, -0.15, 0, 0.8)),
- LIST(KV_OPEN)),
- OFF)) :
- COLOR(m1, GREEN) :
- m2 = LIST(SWEEPSRF(circ1,
- CBSPLINE(2,
- LIST(CTLPT(E3, bbase2, 0, bnheight * 5 / 6),
- CTLPT(E3, 0.15, 0, 0.8)),
- LIST(KV_OPEN)),
- OFF)) :
- COLOR(m2, GREEN) :
- m3 = LIST(SWEEPSRF(circ2,
- CBSPLINE(2,
- LIST(CTLPT(E3, -bupper * 2 / 3, bupper * 1 / 3, bheight),
- CTLPT(E3, -0.08, 0.05, 0.8)),
- LIST(KV_OPEN)),
- OFF)) :
- COLOR(m3, GREEN) :
- m4 = LIST(SWEEPSRF(circ2,
- CBSPLINE(2,
- LIST(CTLPT(E3, bupper * 2 / 3, bupper * 1 / 3, bheight),
- CTLPT(E3, 0.08, 0.05, 0.8)),
- LIST(KV_OPEN)),
- OFF)) :
- COLOR(m4, GREEN) :
- m5 = LIST(SWEEPSRF(circ1,
- CBSPLINE(2,
- LIST(CTLPT(E3, -0.15, 0, 0.8),
- CTLPT(E3, -0.08, 0.05, 0.8),
- CTLPT(E3, 0.08, 0.05, 0.8),
- CTLPT(E3, 0.15, 0, 0.8)),
- LIST(KV_OPEN)),
- OFF)) :
- COLOR(m5, GREEN) :
- return = m1 + m2 + m3 + m4 + m5 ;
-
- bottle = FUNCTION() : oo :
- oo = SURFPREV(bottle_curve()) :
- COLOR(oo, GREEN) :
- return = oo ;
-
- plug = FUNCTION() : pp :
- pp = SURFPREV(plug_curve(0.45)) :
- COLOR(pp, YELLOW) :
- return = pp ;
-
- hell = FUNCTION(upto, spins) : t :
- hell = NIL() :
- lX = rneck :
- lX1 = rneck :
- lY = 0 :
- lY1 = 0 :
- lZ = 0 :
- FOR (t = 2 * PI / 64, 2 * PI / 64, 2 * PI * spins - 2 * PI / 64,
- X = rneck * cos(t) :
- X1 = neck * cos(t) :
- Y = rneck * sin(t) :
- Y1 = neck * sin(t) :
- Z = t * upto / 2 / PI / spins :
- pt1 = VECTOR(lX, lY, lZ + helrad) :
- pt2 = VECTOR(lX1, lY1, lZ + helrad/2) :
- pt3 = VECTOR(lX1, lY1, lZ - helrad/2) :
- pt4 = VECTOR(lX, lY, lZ - helrad) :
- pt5 = VECTOR(X, Y, Z + helrad) :
- pt6 = VECTOR(X1, Y1, Z + helrad/2) :
- pt7 = VECTOR(X1, Y1, Z - helrad/2) :
- pt8 = VECTOR(X, Y, Z - helrad) :
- hell = hell + LIST(POLY(LIST(pt1,
- pt2,
- pt6,
- pt5
- ), FALSE),
- POLY(LIST(pt2,
- pt3,
- pt7,
- pt6
- ), FALSE),
- POLY(LIST(pt3,
- pt4,
- pt8,
- pt7
- ), FALSE)) :
- lX = X : lX1 = X1 : lY = Y : lY1 = Y1 : lZ = Z) :
- t = 2 * PI * spins :
- X = rneck * cos(t) :
- X1 = neck * cos(t) :
- Y = rneck * sin(t) :
- Y1 = neck * sin(t) :
- Z = t * upto / 2 / PI / spins :
- pt1 = VECTOR(lX, lY, lZ + helrad) :
- pt2 = VECTOR(lX1, lY1, lZ + helrad/2) :
- pt3 = VECTOR(lX1, lY1, lZ - helrad/2) :
- pt4 = VECTOR(lX, lY, lZ - helrad) :
- pt5 = VECTOR(X, Y, Z + helrad) :
- pt6 = VECTOR(X1, Y1, Z + helrad/2) :
- pt7 = VECTOR(X1, Y1, Z - helrad/2) :
- pt8 = VECTOR(X, Y, Z - helrad) :
- hell = hell + LIST(POLY(LIST(pt1,
- pt2,
- pt6,
- pt5
- ), FALSE),
- POLY(LIST(pt2,
- pt3,
- pt7,
- pt6
- ), FALSE),
- POLY(LIST(pt3,
- pt4,
- pt8,
- pt7
- ), FALSE)) :
- hellix = convex(MERGEPOLY(hell)) :
- COLOR(hellix, YELLOW) :
- return = hellix ;
-
- view_tree = LIST(bubble() * TRANS(VECTOR(0, 0, 0.4)),
- bottle() * TRANS(VECTOR(0, 0, 0.4)),
- mustasche() * TRANS(VECTOR(0, 0, 0.4)),
- hell(0.3 - helrad, 5) * TRANS(VECTOR(0, 0, 0.1)),
- plug());
-
- viewdclear();
- viewobj(view_tree);
-