!BbbouYwtinZcRySkDA:matrix.org

Curv

323 Members
A language for making art using mathematics | http://curv3d.org | Playground: https://curv.leefallat.ca/ | Ask your question! | Long-lived discussions: https://github.com/curv3d/curv/discussions5 Servers

Load older messages


SenderMessageTime
5 Oct 2024
@3dlirious:matrix.org3dlirious *
dia :: slider \[2,20\] = 12;
height :: slider \[2,20\] = 10;
rib\_width :: slider \[0.1,5\] = 4;
centre\_height :: slider \[0,0.999\] = 0.6;
rib\_num :: int\_slider \[10,30\] = 16;
in
let

pumpkin {d, height, centre\_height, rib\_width, rib\_num} =
let
R = d/2;
dx = rib\_width;
c = dx/2;
dz = height;
b = dz/2;
ctr\_h = centre\_height\*height/2; //mz

// Find dy based on centre_height
a = R/(1 + sqrt(b*b - ctr_h*ctr_h)/b);
dy = 2*a;
my = R - a;

// Find inner radius of ribs so we can hollow the pumpkin without cutting through
angle = pi/rib_num;
tan_a = tan angle;
a2tan2 = a*a*tan_a*tan_a;

// Solve quadratic equation
qa = a2tan2 + c*c;
qb = 2*a2tan2*my;
qc = a2tan2*my*my - a*a*c*c;
ny = (-qb + sqrt(qb*qb - 4*qa*qc))/(2*qa);
ridge_inner_rad = (my + ny)/cos angle;

// Minimum wall thickness of the pumpkin.
shell_min_thickness = 0.2;

pumpkin_body = ellipsoid [dx, dy, dz]
    >> colour orange //(lib.web_colour.DarkOrange)
    >> move.y (-my) >> repeat_radial rib_num
    ;
pumpkin_inside = spheroid.exact [2*(ridge_inner_rad - shell_min_thickness),
                                 2*(ctr_h - shell_min_thickness)]
                    >> colour yellow;

// Stem
stem_out_dia = 2;  //outer diameter
stem_ridge_dia = stem_out_dia/2;
stem_h = 4;
stem_bend_dia = 2*stem_h;
stem_bend_ang = 50*deg;
stem = circle stem_ridge_dia >> colour (lib.web_colour.DarkGreen)
    >> move.y ((stem_ridge_dia - stem_out_dia)/2)
    >> repeat_radial 7
    >> reflect.y
    
    >> extrude stem_h
    >> local_taper {scale:[[1, 1], [0.5, 0.5]], range:[-stem_h/2,stem_h/2]}
    >> about X_axis (bend {d:stem_bend_dia, angle:stem_bend_ang})
    >> rotate.x (-stem_bend_ang/2)
    
    >> move.y (stem_bend_dia/2 + stem_out_dia/2)
    >> twist 0.3
    >> move.z ctr_h
    // Fix bbox!
    ;
whole = difference2.cmix [pumpkin_body, pumpkin_inside] >> into union [stem];

in whole;


face = union \[
triangle \[1,1\] >> move.x 1.5 >> mirror.x >> move.y 1.5,
triangle \[1,1\],
lib.shapes2d.moon {d:4, dx:1} >> rotate (pi/2) >> move.y (-0.5)
\]
\>> colour (lib.web\_colour.Goldenrod)
\>> extrude (dia)
\>> rotate.x (pi/2)
\>> bend {d:0, angle:55\*deg}
;

// Intersection and difference with colour mixing
intersection2 =
let
\_intersection3 mix list = reduce\[everything, \_intersection3b mix\] list;
\_intersection3b mix \[s1,s2\] =
make\_shape {
dist p : max\[s1.dist p, s2.dist p\],
colour p : if mix (
let d1 = s1.dist p;
d2 = s2.dist p;
in if (d2 \<= 0 || d2 \<= d1) s1.colour p else s2.colour p
)
else s1.colour p,
bbox : \[max\[s1.bbox.\[MIN\], s2.bbox.\[MIN\]\], min\[s1.bbox.\[MAX\], s2.bbox.\[MAX\]\]\],
is\_2d : s1.is\_2d && s2.is\_2d,
is\_3d : s1.is\_3d && s2.is\_3d,
};
in {
call : \_intersection3 false,
cmix : \_intersection3 true,
};

difference2 =
let
\_difference2 \[s1,s2\] = intersection2 \[s1, complement s2\];
\_difference2\_col \[s1,s2\] = intersection2.cmix \[s1, complement s2\];
in {
call : \_difference2,
cmix : \_difference2\_col,
};

in

difference2.cmix \[
pumpkin {d:dia, height:height, centre\_height:centre\_height, rib\_width:rib\_width, rib\_num:rib\_num},
face,
\]

> > rotate (10_deg) >> rotate.x (10_deg)
> > lib.utilities.face\_camera
> > //>> show\_axes
16:42:36
@3dlirious:matrix.org3dlirious *
dia :: slider \[2,20\] = 12;
height :: slider \[2,20\] = 10;
rib\_width :: slider \[0.1,5\] = 4;
centre\_height :: slider \[0,0.999\] = 0.6;
rib\_num :: int\_slider \[10,30\] = 16;
in
let

pumpkin {d, height, centre\_height, rib\_width, rib\_num} =
let
R = d/2;
dx = rib\_width;
c = dx/2;
dz = height;
b = dz/2;
ctr\_h = centre\_height\*height/2; //mz

// Find dy based on centre_height
a = R/(1 + sqrt(b*b - ctr_h*ctr_h)/b);
dy = 2*a;
my = R - a;

// Find inner radius of ribs so we can hollow the pumpkin without cutting through
angle = pi/rib_num;
tan_a = tan angle;
a2tan2 = a*a*tan_a*tan_a;

// Solve quadratic equation
qa = a2tan2 + c*c;
qb = 2*a2tan2*my;
qc = a2tan2*my*my - a*a*c*c;
ny = (-qb + sqrt(qb*qb - 4*qa*qc))/(2*qa);
ridge_inner_rad = (my + ny)/cos angle;

// Minimum wall thickness of the pumpkin.
shell_min_thickness = 0.2;

pumpkin_body = ellipsoid [dx, dy, dz]
    >> colour orange //(lib.web_colour.DarkOrange)
    >> move.y (-my) >> repeat_radial rib_num
    ;
pumpkin_inside = spheroid.exact [2*(ridge_inner_rad - shell_min_thickness),
                                 2*(ctr_h - shell_min_thickness)]
                    >> colour yellow;

// Stem
stem_out_dia = 2;  //outer diameter
stem_ridge_dia = stem_out_dia/2;
stem_h = 4;
stem_bend_dia = 2*stem_h;
stem_bend_ang = 50*deg;
stem = circle stem_ridge_dia >> colour (lib.web_colour.DarkGreen)
    >> move.y ((stem_ridge_dia - stem_out_dia)/2)
    >> repeat_radial 7
    >> reflect.y
    
    >> extrude stem_h
    >> local_taper {scale:[[1, 1], [0.5, 0.5]], range:[-stem_h/2,stem_h/2]}
    >> about X_axis (bend {d:stem_bend_dia, angle:stem_bend_ang})
    >> rotate.x (-stem_bend_ang/2)
    
    >> move.y (stem_bend_dia/2 + stem_out_dia/2)
    >> twist 0.3
    >> move.z ctr_h
    // Fix bbox!
    ;
whole = difference2.cmix [pumpkin_body, pumpkin_inside] >> into union [stem];

in whole;

face = union \[
triangle \[1,1\] >> move.x 1.5 >> mirror.x >> move.y 1.5,
triangle \[1,1\],
lib.shapes2d.moon {d:4, dx:1} >> rotate (pi/2) >> move.y (-0.5)
\]
\>> colour (lib.web\_colour.Goldenrod)
\>> extrude (dia)
\>> rotate.x (pi/2)
\>> bend {d:0, angle:55\*deg}
;

// Intersection and difference with colour mixing
intersection2 =
let
\_intersection3 mix list = reduce\[everything, \_intersection3b mix\] list;
\_intersection3b mix \[s1,s2\] =
make\_shape {
dist p : max\[s1.dist p, s2.dist p\],
colour p : if mix (
let d1 = s1.dist p;
d2 = s2.dist p;
in if (d2 \<= 0 || d2 \<= d1) s1.colour p else s2.colour p
)
else s1.colour p,
bbox : \[max\[s1.bbox.\[MIN\], s2.bbox.\[MIN\]\], min\[s1.bbox.\[MAX\], s2.bbox.\[MAX\]\]\],
is\_2d : s1.is\_2d && s2.is\_2d,
is\_3d : s1.is\_3d && s2.is\_3d,
};
in {
call : \_intersection3 false,
cmix : \_intersection3 true,
};

difference2 =
let
\_difference2 \[s1,s2\] = intersection2 \[s1, complement s2\];
\_difference2\_col \[s1,s2\] = intersection2.cmix \[s1, complement s2\];
in {
call : \_difference2,
cmix : \_difference2\_col,
};

in

difference2.cmix \[
pumpkin {d:dia, height:height, centre\_height:centre\_height, rib\_width:rib\_width, rib\_num:rib\_num},
face,
\]

> > rotate (10_deg) >> rotate.x (10_deg)
> > lib.utilities.face\_camera
> > //>> show\_axes
16:43:15
@3dlirious:matrix.org3dlirious *
parametric
    dia :: slider [2,20] = 12;
    height :: slider [2,20] = 10;
    rib_width :: slider [0.1,5] = 4;
    centre_height :: slider [0,0.999] = 0.6;
    rib_num :: int_slider [10,30] = 16;
in
let

pumpkin {d, height, centre_height, rib_width, rib_num} =
    let
        R = d/2;
        dx = rib_width;
        c = dx/2;
        dz = height;
        b = dz/2;
        ctr_h = centre_height*height/2; //mz
        
        // Find dy based on centre_height
        a = R/(1 + sqrt(b*b - ctr_h*ctr_h)/b);
        dy = 2*a;
        my = R - a;
        
        // Find inner radius of ribs so we can hollow the pumpkin without cutting through
        angle = pi/rib_num;
        tan_a = tan angle;
        a2tan2 = a*a*tan_a*tan_a;
        
        // Solve quadratic equation
        qa = a2tan2 + c*c;
        qb = 2*a2tan2*my;
        qc = a2tan2*my*my - a*a*c*c;
        ny = (-qb + sqrt(qb*qb - 4*qa*qc))/(2*qa);
        ridge_inner_rad = (my + ny)/cos angle;
        
        // Minimum wall thickness of the pumpkin.
        shell_min_thickness = 0.2;
        
        pumpkin_body = ellipsoid [dx, dy, dz]
            >> colour orange //(lib.web_colour.DarkOrange)
            >> move.y (-my) >> repeat_radial rib_num
            ;
        pumpkin_inside = spheroid.exact [2*(ridge_inner_rad - shell_min_thickness),
                                         2*(ctr_h - shell_min_thickness)]
                            >> colour yellow;
        
        // Stem
        stem_out_dia = 2;  //outer diameter
        stem_ridge_dia = stem_out_dia/2;
        stem_h = 4;
        stem_bend_dia = 2*stem_h;
        stem_bend_ang = 50*deg;
        stem = circle stem_ridge_dia >> colour (lib.web_colour.DarkGreen)
            >> move.y ((stem_ridge_dia - stem_out_dia)/2)
            >> repeat_radial 7
            >> reflect.y
            
            >> extrude stem_h
            >> local_taper {scale:[[1, 1], [0.5, 0.5]], range:[-stem_h/2,stem_h/2]}
            >> about X_axis (bend {d:stem_bend_dia, angle:stem_bend_ang})
            >> rotate.x (-stem_bend_ang/2)
            
            >> move.y (stem_bend_dia/2 + stem_out_dia/2)
            >> twist 0.3
            >> move.z ctr_h
            // Fix bbox!
            ;
        whole = difference2.cmix [pumpkin_body, pumpkin_inside] >> into union [stem];
    in whole;

face = union [
        triangle [1,1] >> move.x 1.5 >> mirror.x >> move.y 1.5,
        triangle [1,1],
        lib.shapes2d.moon {d:4, dx:1} >> rotate (pi/2) >> move.y (-0.5)
        ]
    >> colour (lib.web_colour.Goldenrod)
    >> extrude (dia)
    >> rotate.x (pi/2)
    >> bend {d:0, angle:55*deg}
    ;

// Intersection and difference with colour mixing
intersection2 =
    let
        _intersection3 mix list = reduce[everything, _intersection3b mix] list;
        _intersection3b mix [s1,s2] =
            make_shape {
                dist p : max[s1.dist p, s2.dist p],
                colour p : if mix (
                    let d1 = s1.dist p;
                        d2 = s2.dist p;
                    in if (d2 <= 0 || d2 <= d1) s1.colour p else s2.colour p
                    )
                    else s1.colour p,
                bbox : [max[s1.bbox.[MIN], s2.bbox.[MIN]], min[s1.bbox.[MAX], s2.bbox.[MAX]]],
                is_2d : s1.is_2d && s2.is_2d,
                is_3d : s1.is_3d && s2.is_3d,
            };
    in {
        call : _intersection3 false,
        cmix : _intersection3 true,
    };

difference2 =
    let
        _difference2 [s1,s2] = intersection2 [s1, complement s2];
        _difference2_col [s1,s2] = intersection2.cmix [s1, complement s2];
    in {
        call : _difference2,
        cmix : _difference2_col,
    };

in

difference2.cmix [
pumpkin {d:dia, height:height, centre_height:centre_height, rib_width:rib_width, rib_num:rib_num},
face,
]

>> rotate (10*deg) >> rotate.x (10*deg) 
>> lib.utilities.face_camera
//>> show_axes

16:44:00
@3dlirious:matrix.org3dliriousscreenshot.1728146340.jpg
Download screenshot.1728146340.jpg
16:44:31
@3dlirious:matrix.org3dliriousStill a work in progress, but figure I better go ahead and share, since it won't be October for long.16:59:24
@3dlirious:matrix.org3dliriousscreenshot.1728157440.jpg
Download screenshot.1728157440.jpg
19:57:54
@3dlirious:matrix.org3dlirious

Seven pumpkins, fresh from the parametric patch:

row 2 [
    difference2.cmix [
        pumpkin {d:12, height:10, centre_height:0.6, rib_width:4, rib_num:16},
        face,
        ] >> align.min.z,
    pumpkin {d:13, height:19, centre_height:0.8, rib_width:4.2, rib_num:17} >> align.min.z,
    pumpkin {d:16, height:7, centre_height:0.6, rib_width:4, rib_num:18} >> align.min.z,
    pumpkin {d:14, height:10, centre_height:0.6, rib_width:4, rib_num:15} >> align.min.z,
    pumpkin {d:15, height:15, centre_height:0.8, rib_width:3.5, rib_num:16} >> align.min.z,
    pumpkin {d:11, height:8, centre_height:0.6, rib_width:3.5, rib_num:12} >> align.min.z,
    pumpkin {d:13, height:9, centre_height:0.5, rib_width:4.2, rib_num:15} >> align.min.z,
]
19:58:02
6 Oct 2024
@3dlirious:matrix.org3dliriousscreenshot.1728218694.jpg
Download screenshot.1728218694.jpg
12:47:20
@3dlirious:matrix.org3dlirious Today's varietal is intersected with the F surface, lib.tpms.tpms_f. It reminds me of Yayoi Kusama's dotted pumpkins, and so I coloured it gold in homage. 12:47:45
@ivanrancic:matrix.orgkrzno
In reply to @3dlirious:matrix.org

Seven pumpkins, fresh from the parametric patch:

row 2 [
    difference2.cmix [
        pumpkin {d:12, height:10, centre_height:0.6, rib_width:4, rib_num:16},
        face,
        ] >> align.min.z,
    pumpkin {d:13, height:19, centre_height:0.8, rib_width:4.2, rib_num:17} >> align.min.z,
    pumpkin {d:16, height:7, centre_height:0.6, rib_width:4, rib_num:18} >> align.min.z,
    pumpkin {d:14, height:10, centre_height:0.6, rib_width:4, rib_num:15} >> align.min.z,
    pumpkin {d:15, height:15, centre_height:0.8, rib_width:3.5, rib_num:16} >> align.min.z,
    pumpkin {d:11, height:8, centre_height:0.6, rib_width:3.5, rib_num:12} >> align.min.z,
    pumpkin {d:13, height:9, centre_height:0.5, rib_width:4.2, rib_num:15} >> align.min.z,
]
Yummy, thank
18:23:40
15 Oct 2024
@pedocepe:matrix.org@pedocepe:matrix.org left the room.08:35:04

There are no newer messages yet.


Back to Room ListRoom Version: 6