|
|
|
Figure 0001: fig0010.asy (Compiled with Asymptote version 1.87svn-r4652) |
/* One may view this animated example */
import three;
size(12cm);
currentprojection=orthographic(1,1,1.5);
currentlight=(1,0,1);
triple P00=-X-Y+0.5*Z, P03=-X+Y, P33=X+Y, P30=X-Y;
triple[][] P={
{P00,P00+(-0.5,0.5,-1),P03+(0,-0.5,1),P03},
{P00+(0.5,-0.5,-1),(-0.5,-0.5,0.5),(-0.5,0.5,-1.5),P03+(0.5,0,1)},
{P30+(-0.5,0,1),(0.5,-0.5,-1.5),(0.5,0.5,1),P33+(-0.5,0,1)},
{P30,P30+(0,0.5,1),P33+(0,-0.5,1),P33}
};
surface s=surface(patch(P));
draw(s,15,15,yellow,meshpen=grey);
draw(sequence(new path3(int i){
return s.s[i].external();},s.s.length), bp+red);
dot("P[0][0]",P[0][0], align=N, black);
dot("P[0][3]",P[0][3], black);
dot("P[3][3]",P[3][3], align=S, black);
dot("P[3][0]",P[3][0], align=W, black);
draw(Label("P[0][1]",align=SW,EndPoint),P[0][0]--P[0][1], Arrow3);
draw(Label("P[1][0]",align=SE,EndPoint),P[0][0]--P[1][0], Arrow3);
draw(Label("P[0][2]",align=E,EndPoint),P[0][3]--P[0][2], Arrow3);
draw(Label("P[1][3]",EndPoint),P[0][3]--P[1][3], Arrow3);
draw(Label("P[2][3]",EndPoint),P[3][3]--P[2][3], Arrow3);
draw(Label("P[3][2]",EndPoint),P[3][3]--P[3][2], Arrow3);
draw(Label("P[3][1]",EndPoint),P[3][0]--P[3][1], Arrow3);
draw(Label("P[2][0]", align=W,EndPoint),P[3][0]--P[2][0], Arrow3);
dot("P[1][1]",P[1][1], align=S);
dot("P[1][2]",P[1][2], align=E);
dot("P[2][2]",P[2][2], align=N);
dot("P[2][1]",P[2][1], align=W);
for (int i=0; i < s.s.length; ++i)
dot(s.s[i].internal(), bp+red);
if(!is3D())
shipout(bbox(Fill(lightgrey)));
|
|
|
Figure 0002: fig0020.asy (Compiled with Asymptote version 1.87svn-r4652) |
import three;
import palette;
size(12cm);
currentprojection=orthographic(1,1,1.5);
currentlight=(1,0,1);
triple P00=-X-Y+0.5*Z, P03=-X+Y, P33=X+Y, P30=X-Y;
triple[][] P={
{P00,P00+(-0.5,0.5,-1),P03+(0,-0.5,1),P03},
{P00+(0.5,-0.5,-1),(-0.5,-0.5,0.5),(-0.5,0.5,-1.5),P03+(0.5,0,1)},
{P30+(-0.5,0,1),(0.5,-0.5,-1.5),(0.5,0.5,1),P33+(-0.5,0,1)},
{P30,P30+(0,0.5,1),P33+(0,-0.5,1),P33}
};
surface s=surface(patch(P));
s.colors(palette(s.map(zpart),Gradient(yellow,red)));
// s.colors(palette(s.map(zpart),Rainbow()));
draw(s);
draw(sequence(new path3(int i){
return s.s[i].external();},s.s.length), bp+orange);
if(!is3D())
shipout(bbox(Fill(lightgrey)));
|
|
|
Figure 0003: fig0030.asy (Compiled with Asymptote version 1.87svn-r4652) |
import three;
size(10cm);
currentlight=(0,0,1);
surface sf=surface(patch(P=new triple[][] {
{(0,0,0),(1,0,0),(1,0,0),(2,0,0)},
{(0,1,0),(1,0,1),(1,0,1),(2,1,0)},
{(0,1,0),(1,0,-1),(1,0,-1),(2,1,0)},
{(0,2,0),(1,2,0),(1,2,0),(2,2,0)}
}));
draw(sf,surfacepen=yellow);
draw(sf.s[0].vequals(0.5),squarecap+2bp+blue,currentlight);
draw(sf.s[0].uequals(0.5),squarecap+2bp+red,currentlight);
|
|
|
Figure 0004: fig0040.asy (Compiled with Asymptote version 1.87svn-r4652) |
import three;
size(8cm,0);
real radius=1, theta=37, phi=60;
currentprojection=perspective(4,1,2);
// Planes
pen bg=gray(0.9)+opacity(0.5);
draw(surface((1.2,0,0)--(1.2,0,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg,bg);
draw(surface((0,1.2,0)--(0,1.2,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg,bg);
draw(surface((1.2,0,0)--(1.2,1.2,0)--(0,1.2,0)--(0,0,0)--cycle),bg,bg);
real r=1.5;
draw(Label("$x$",1), O--r*X, Arrow3(HookHead3));
draw(Label("$y$",1), O--r*Y, Arrow3(HookHead3));
draw(Label("$z$",1), O--r*Z, Arrow3(HookHead3));
label("$\rm O$", (0,0,0), W);
triple pQ=radius*dir(theta,phi); // Point Q
// triple pQ=radius*expi(radians(theta),radians(phi)); // Point Q
draw(O--radius*dir(90,phi)^^O--pQ, dashed);
dot("$R*\mathrm{dir}\left(\theta,\phi\right)$",pQ);
// Arcs
draw("$\theta$", reverse(arc(O,0.5*pQ,0.5*Z)), N+0.3E, Arrow3(HookHead2));
draw("$\phi$", arc(O,0.5*X,0.5*(pQ.x,pQ.y,0)), N+0.3E, Arrow3(HookHead2));
path3 p3=O--arc(O,radius,0,phi,90,phi)--cycle;
draw(surface(p3), blue+opacity(0.5));
|
|
|
Figure 0005: fig0050.asy (Compiled with Asymptote version 1.87svn-r4652) |
import three; import math;
size(8cm,0);
currentprojection=obliqueX;
real h=2;
triple A =(0,0,h), B=(h,0,0), C=(0,h,0), D=(0,0,0);
triple Ip=midpoint(A--C), J=midpoint(A--B);
triple K=shift((0,0,-0.25*h))*A;
triple M=interp(K,J,intersect(K,J,normal(new triple[]{B,C,D}),D));
triple Np=interp(K,Ip,intersect(K,Ip,normal(new triple[]{B,C,D}),D));
dot("$A$", A, align=Z); dot("$B$", B, align=S);
dot("$C$", C, align=S); dot("$D$", D, align=W);
dot("$I$", Ip, align=N); dot("$J$", J, align=W);
dot("$K$", K, align=NE); dot("$M$", M, align=SE);
dot("$N$", Np, align=S);
draw(A--B--C--cycle^^B--M^^C--Np^^J--M^^Ip--Np);
draw(A--D--C^^D--B^^J--K^^K--Ip, dashed);
|
|
|
Figure 0006: fig0060.asy (Compiled with Asymptote version 1.87svn-r4652) |
settings.render=0;
import three;
size(4cm,0);
currentprojection=perspective((45,45,30));
path3 YZ=plane((0,4,0),(0,0,4));
draw("$x$",project(O--X),Arrow);
draw("$y$",project(O--Y),Arrow);
draw("$z$",project(O--Z),Arrow);
draw(YZ);
label(scale(5)*project("A",Y,Z,(0,1,1)));
|
|
|
Figure 0007: fig0070.asy (Compiled with Asymptote version 1.87svn-r4652) |
// From the Asymptote forum
import bsp;
typedef path3[] shape;
shape operator *(transform3 T, shape p){
shape os;
for(path3 g:p) os.push(T*g);
return os;
}
path3 path(triple[] T){
path3 P;
for(triple i:T) P=P--i;
return P;
}
void addshapes(face[] F, shape[] shp, pen drawpen=currentpen, pen fillpen=white)
{
for(int i=0; i < shp.length; ++i)
for(int j=0; j < shp[i].length; ++j) {
path3 g=shp[i][j];
picture pic=F.push(g);
filldraw(pic,project(g),fillpen, drawpen);
// filldraw(pic,g,currentlight.intensity(F[F.length-1].point)*fillpen, drawpen);
}
}
shape cylinder(real R=1, real H=1, int n=18){
shape Cyl;
triple[] CTop;
triple[] CBot;
for(int i=0; i <= n; ++i)
CBot.push((R*cos(2pi*i/n), R*sin(2pi*i/n),0));
CTop = CBot+(0,0,H);
for(int i=0; i < n; ++i)
Cyl.push(CBot[i]--CBot[i+1]--CTop[i+1]--CTop[i]--cycle);
path3 P=path(CBot)--cycle;
Cyl.push(P);
Cyl.push(shift(H*Z)*P);
return Cyl;
}
shape rightslab(real x=1, real y=1, real z=1){
shape slab;
slab[0] = (0,0,0)--(1,0,0)--(1,1,0)--(0,1,0)--cycle;
slab[1] = (0,0,0)--(1,0,0)--(1,0,1)--(0,0,1)--cycle;
slab[2] = (1,0,0)--(1,1,0)--(1,1,1)--(1,0,1)--cycle;
slab[3] = (1,1,0)--(0,1,0)--(0,1,1)--(1,1,1)--cycle;
slab[4] = (0,1,0)--(0,0,0)--(0,0,1)--(0,1,1)--cycle;
slab[5] = (0,0,1)--(1,0,1)--(1,1,1)--(0,1,1)--cycle;
return scale(x,y,z)*slab;
}
size(10cm,0);
triple cam=(1600,200,150);
//currentprojection=orthographic(1600,800,400);
currentprojection=perspective(cam); //Far away!
currentlight=rotate(-45,Z)*(cam+(0,0,1000));
real Blen = 180;
real Bwdt = 30;
real Bhgt = 3;
real Clen = 130;
real Cwdt = 50;
real Chgt = 50;
real cylr = 7.5;
real cylh = 37.0 ;
shape slab1 = shift(-Bwdt/2*Y-Bhgt/2*Z+Clen/2*X)*rightslab(Blen,Bwdt,Bhgt);
shape slab2 = shift(-Cwdt/2*Y-Chgt/2*Z-Clen/2*X)*rightslab(Clen,Cwdt,Chgt);
shape cyl1 = shift((Blen+Clen/2-2*cylr)*X-(cylh/2)*Z)*cylinder(R=cylr, H=cylh);
shape[] group1={slab1};
shape[] group2={slab2};
shape[] group3={cyl1};
face[] faces;
addshapes(faces, group1, drawpen=linewidth(0.25bp), fillpen=opacity(0.35)+red);
addshapes(faces, group2, drawpen=linewidth(0.25bp), fillpen=opacity(0.5)+lightblue);
addshapes(faces, group3, drawpen=linewidth(0.25bp), fillpen=opacity(0.5)+lightyellow);
add(faces);
shipout(format="pdf", bbox(3mm,white));
|
|
|
Figure 0008: fig0080.asy (Compiled with Asymptote version 1.87svn-r4652) |
import bsp;
typedef path3[] shape;
shape operator *(transform3 T, shape p){
shape os;
for(path3 g:p) os.push(T*g);
return os;
}
path3 path(triple[] T){
path3 P;
for(triple i:T) P=P--i;
return P;
}
void addshapes(face[] F, shape[] shp, pen drawpen=currentpen, pen fillpen=white)
{
for(int i=0; i < shp.length; ++i)
for(int j=0; j < shp[i].length; ++j) {
path3 g=shp[i][j];
picture pic=F.push(g);
if(fillpen != nullpen) filldraw(pic,project(g),fillpen, drawpen);
else draw(pic,project(g),drawpen);
// filldraw(pic,g,currentlight.intensity(F[F.length-1].point)*fillpen, drawpen);
}
}
shape cylinder(real R=1, real H=1, int n=18){
shape Cyl;
triple[] CTop;
triple[] CBot;
for(int i=0; i <= n; ++i)
CBot.push((R*cos(2pi*i/n), R*sin(2pi*i/n),0));
CTop = CBot+(0,0,H);
for(int i=0; i < n; ++i)
Cyl.push(CBot[i]--CBot[i+1]--CTop[i+1]--CTop[i]--cycle);
path3 P=path(CBot)--cycle;
Cyl.push(P);
Cyl.push(shift(H*Z)*P);
return Cyl;
}
size(10cm,0);
currentprojection=orthographic(1,1,1);
shape cyl1 = cylinder(R=1, H=2);
shape[] group={cyl1};
face[] hidden, visible;
addshapes(hidden, group, drawpen=linewidth(bp));
addshapes(visible, group, drawpen=dotted, fillpen=nullpen);
add(hidden);
add(visible);
shipout(format="pdf");
|
|
|
Figure 0009: fig0090.asy (Compiled with Asymptote version 1.87svn-r4652) |
size(10cm,0);
import three;
currentprojection=obliqueX;
triple v1=(4,0,0),
v2=(0,6,0),
p0=(-2,-3,0);
path3 pl1=plane(v1,v2,p0);
path ph=transform(v1,v2,p0,currentprojection)*((0,-2){W}..(0,2){W}..cycle);
filldraw(project(pl1)^^ph,evenodd+lightgrey);
|
|
|
Figure 0010: fig0100.asy (Compiled with Asymptote version 1.87svn-r4652) |
size(12cm,0);
import bsp;
currentprojection=orthographic(1,1.5,1);
path3 xy=plane((1,0,0),(0,1,0),(0,0,0));
path3 xz=rotate(90,X)*xy;
path3 yz=rotate(-90,Y)*xy;
face[] f;
filldraw(f.push(xy),project(xy),grey);
filldraw(f.push(xz),project(xz),grey);
filldraw(f.push(yz),project(yz),grey);
add(f);
draw(Label("$x$",EndPoint), O--(1,0,0), Arrow3);
draw(Label("$y$",EndPoint), O--(0,1,0), Arrow3);
draw(Label("$z$",EndPoint), O--(0,0,1), Arrow3);
dot(O);
path[] ph=texpath("$\displaystyle\int_{-\infty}^{+\infty}e^{-\alpha x^2}\,dx=
\sqrt{\frac{\pi}{\alpha}}$");
ph =shift((0.5,0.5))*rotate(-45)*scale(1/abs(min(ph)-max(ph)))*ph;
filldraw(project(path3(ph,XYplane)),0.8*yellow);
filldraw(project(path3(ph,ZXplane)),0.8*yellow);
filldraw(project(path3(ph,YZplane)),0.8*yellow);
shipout(bbox((palegrey)));
|
|
|
Figure 0011: fig0110.asy (Compiled with Asymptote version 1.87svn-r4652) |
import three;
size(10cm,0);
currentprojection=orthographic(1,1.5,1);
path3 xy=XY*unitsquare3, xz=ZX*unitsquare3, yz=YZ*unitsquare3;
draw(xy^^xz^^yz, grey);
path3 p3xy=path3(texpath("$\pi$")[0],XYplane);
p3xy=shift((0.5,0.5,0))*scale3(1/abs(min(p3xy)-max(p3xy)))*p3xy;
surface s=surface(p3xy,planar=true);
draw(s, surfacepen=blue, meshpen=orange+3pt);
transform3 Txz=planeproject(xz,(0,-1,1));
draw(Txz*s, red);
transform3 Tyz=planeproject(yz,(-1,0,1));
draw(Tyz*s, green);
path3 p3xz=Txz*p3xy;
path3 p3yz=Tyz*p3xy;
int lg=length(p3xy);
triple p;
for(int i=0;i<=lg;++i) {
p=point(p3xy,i);
draw(p--point(p3xz,i), yellow);
draw(p--point(p3yz,i), orange);
}
Dernière modification/Last modified: Mon Sep 21 15:50:04 CEST 2009
Philippe Ivaldi