Asymptote using tube.asy – fig0010

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 20 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
size(12cm,0);

currentprojection=orthographic(0,0.5,1);

// The tube's section used is a path (here an U);
path section=rotate(90)*(N+W--W--E--N+E);

// The tubed curve (yellow tube) has three nodes joined with cubic spline:
path3 p=shift(20X)*scale(10,20,1)*(X..Y..X+Y..cycle);

// A tube is a surface, here the tube is drawn in yellow with purple meshes.
draw(tube(p,section), yellow, bp+purple);
draw(p,red); dot(p);

// The tubed curve (purple tube) has three nodes joined with linear segments:
path3 p=scale(10,20,1)*(X--Y--(X+Y)--cycle);

// Here the tube is drawn in purple with yellow meshes.
draw(tube(p,scale(2)*section), purple, bp+yellow);
draw(p,red); dot(p);

Étiquettes :

Asymptote using tube.asy – fig0020

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 21 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
size(10cm,0);

currentprojection=orthographic(0,0.5,1);
path section=rotate(90)*(N+W--W--E--N+E);

// The tubed curve has three nodes joined with linear segments.
path3 p=scale(10,20,1)*(X--Y--(X+Y)--cycle);

// We may use the routine roundedpath in order to obtain rounded corner:
draw(tube(roundedpath(p,r=0.05),
section,
corner=100), // Controls the number of elementary tubes at the corners
purple, bp+yellow+thin());
draw(p,red); dot(p);

Étiquettes :

Asymptote using tube.asy – fig0030

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 22 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
size(10cm,0);

currentprojection=orthographic(0,0.5,1);
path section=rotate(180)*(N+W--W--E--N+E);

path3 p=scale(5,10,1)*unitcircle3;

draw(tube(p, section,
relstep=1/6), // Fix the sample step of the relative time (reltime) of the elementary tubes.
purple, bp+yellow);
draw(p,red); dot(p);

Étiquettes :

Asymptote using tube.asy – fig0040

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 23 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
import graph3;

size(10cm,0);
currentprojection=perspective(4,3,4);

triple f(real t){
return t*Z+(cos(2pi*t),sin(2pi*t),0)/sqrt(1+0.5*t^2);
}

path3 p=graph(f,0,2.7,operator ..);
draw(tube(p,scale(0.2)*polygon(5)), purple);

Étiquettes : ,

Asymptote using tube.asy – fig0050

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 0 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
import graph3;

size(10cm,0);
currentprojection=perspective(4,3,4);
real x(real t) {return (1/sqrt(1+0.5*t^2))*cos(2pi*t);}
real y(real t) {return (1/sqrt(1+0.5*t^2))*sin(2pi*t);}
real z(real t) {return t;}

path3 p=graph(x,y,z,0,2.7,operator ..);
path section=scale(0.2)*polygon(5);

// tube.asy defines a "colored path".
// The value of coloredtype may be coloredSegments or coloredNodes.
// Here the path scale(0.2)*polygon(5) has fixed colored SEGMENTS.
coloredpath cp=coloredpath(section,
// The array of pens become automatically cyclic.
new pen[]{0.8*red, 0.8*blue, 0.8*yellow, 0.8*purple, black},
colortype=coloredSegments);

// Draw the tube, each SEGMENT of the section is colored.
draw(tube(p,cp));

Étiquettes : , ,

Asymptote using tube.asy – fig0060

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 1 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
import graph3;

size(10cm,0);
currentprojection=perspective(4,3,4);
real x(real t) {return (1/sqrt(1+0.5*t^2))*cos(2pi*t);}
real y(real t) {return (1/sqrt(1+0.5*t^2))*sin(2pi*t);}
real z(real t) {return t;}

path3 p=graph(x,y,z,0,2.7,operator ..);
path section=scale(0.2)*polygon(5);

// Here the path scale(0.2)*polygon(5) has colored NODES.
coloredpath cp=coloredpath(section,
new pen[]{0.8*red, 0.8*blue, 0.8*yellow, 0.8*purple, black},
colortype=coloredNodes);

// Draw the tube, each NODE of the section is colored.
draw(tube(p,cp));

Étiquettes : , ,

Asymptote using tube.asy – fig0070

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 2 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
import graph3;

size(10cm,0);
currentprojection=perspective(4,3,4);
real x(real t) {return (1/sqrt(1+0.5*t^2))*cos(2pi*t);}
real y(real t) {return (1/sqrt(1+0.5*t^2))*sin(2pi*t);}
real z(real t) {return t;}

path3 p=graph(x,y,z,0,2.7,operator ..);
path section=scale(0.2)*polygon(5);

// Define a pen wich depends of a real t. t represent the "reltime" of the path3 p.
pen pen(real t){
return interp(red,blue,1-2*abs(t-0.5));
}

// Here the section has colored segments (by default) depending to reltime.
draw(tube(p,coloredpath(section,pen)));

Étiquettes : , ,

Asymptote using tube.asy – fig0080

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 2 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
import graph3;
size(12cm,0);
currentprojection=perspective((-1,1,1));

int p=7, q=3;
real n=p/q;
real a=1, b=1;
real x(real t){return a*cos(t);}
real y(real t){return a*sin(t);}
real z(real t){return b*cos(n*t);}

real R(real t){
real st2=(n*sin(n*t))^2;
return a*(1+st2)^(1.5)/sqrt(1+st2+n^4*cos(n*t)^2);
// return -a*(1+st2)^(1.5)/sqrt(1+st2+n^4*cos(n*t)^2); // Signed radius curvature
}

real mt=q*2*pi;
path3 p=graph(x,y,z,0,mt,operator ..)..cycle;

real m=R(0), M=R(0.5*pi/n);

// Define a pen depending to the radius curvature of graph(x,y,z) at reltime t
pen curvaturePen(real t){
real r=abs(R(t*mt)-m)/(M-m);
return interp(red,blue,r);
}

// Draw the tube, colors depend of the radius curvature R.
draw(tube(p,coloredpath(scale(0.1)*unitcircle, curvaturePen)));

Étiquettes : , ,

Asymptote using tube.asy – fig0090

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 3 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
import graph3;

size(10cm,0);
currentprojection=perspective(4,3,4);
real x(real t) {return (1/sqrt(1+0.5*t^2))*cos(2pi*t);}
real y(real t) {return (1/sqrt(1+0.5*t^2))*sin(2pi*t);}
real z(real t) {return t;}

path3 p=graph(x,y,z,0,2.7,operator ..);
path section=scale(0.2)*polygon(4);

// Define an array of pen wich depends of a real t. t represent the "reltime" of the path3 p.
pen[] pens(real t){
return new pen[] {interp(blue,red,t),
interp(orange,yellow,t),
interp(green,orange,t),
interp(red,purple,t)};
}

// "pen[] pens(real t)" allows to color each nodes or segments with a real parameter (the reltime)
// Note that all arrays of pens are convert to cyclical arrays.
draw(tube(p,coloredpath(section,
pens,
colortype=coloredNodes)));

Étiquettes : , , ,

Asymptote using tube.asy – fig0100

Category: Asymptote,Examples 3D,tube.asyPh. Ivaldi @ 4 h 11 min (Compiled with Asymptote version 2.14svn-r5318)

import tube;
import graph3;
size(12cm,0);
currentprojection=orthographic(4,3,2);

real x(real t) {return sin(t);}
real y(real t) {return cos(t);}
real z(real t) {return sqrt(t);}

path3 p=graph(x,y,z,0,4pi,50,operator ..);

path section=subpath(unitcircle,0,2);

pen pens(real t){
return interp(red,blue,t);
}

// Define a transformation wich will be applied to each section at reltime t.
transform T(real t){return scale(t^0.75/2);}

// Combination of pens and transform:
draw(tube(p,coloredpath(section,pens), T));
draw(p);

Étiquettes : , 