Source de geoespace_manuel.tex
Fichier TeX
\documentclass[10pt]{article}

% Use this form to include eps (latex) or pdf (pdflatex) files:
\usepackage{asymptote}
\usepackage[latin1]{inputenc}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{eurosym}
\usepackage{pstricks}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{frcursive}
\usepackage{lmodern} 
\usepackage{fichexo} %package personnel
\usepackage{amsfonts,amssymb,amsmath,amsthm}
\usepackage{mathrsfs}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{calc}
\usepackage{stmaryrd}
\usepackage{picins}

\newcommand{\asym}{ \texttt{Asymptote} }
\newcommand{\com}{$\blacktriangleright$}

% Use this form with latex or pdflatex to include inline LaTeX code:
%\usepackage[inline]{asymptote}

% Enable this line to produce pdf hyperlinks with latex:
%\usepackage[hypertex]{hyperref}

% Enable this line to produce pdf hyperlinks with pdflatex:
%\usepackage[pdftex]{hyperref}
\title{Macros de géométrie spatiale avec \asym}
\author{D. Comin}
\begin{document}
\maketitle

\tableofcontents
\newpage

\begin{asydef}
// Global Asymptote définitions can be put here.
usepackage("bm");
defaultpen(fontsize(10));
\end{asydef}

\def\A{A}
\def\B{\bm{B}}
\section{Les projections}
Ce paragraphe est une réécriture de la documentation de \asym concernant le module \texttt{three.asy}. Toutes les commandes dont il est question ici en sont issues. 

\asym connaît cinq type de projections, elles conditionnent la façon dont est représenté l'espace en 3D sur une feuille plane.

\com \verb+oblique(real angle)+ : Le point $(x,y,z)$ est projeté sur $(x-0.5z,y-0.5z)$. Les objets contenus dans le plan $xOy$ sont en vraies grandeurs. L'angle est optionnel, il permet de fixé l'angle que fait la partie négative des abscisses avec l'horizontale sur le plan de projection.

\com \verb+obliqueX(real angle)+ : Le point $(x,y,z)$ est projeté sur $(y-0.5x,z-0.5x)$. Les objets contenus dans le plan $yOz$ sont en vraies grandeurs : cette projection est commune en Mathématiques.
L'angle est optionnel, il permet de fixé l'angle que fait la partie négative des abscisses avec l'horizontale sur le plan de projection.

\com \verb+obliqueY(real angle)+ :  Le point $(x,y,z)$ est projeté sur $(x+0.5y,z+0.5y)$. Les objets contenus dans le plan $xOz$ sont en vraies grandeurs.
L'angle est optionnel, il permet de fixé l'angle que fait la partie positive des ordonnées avec l'horizontale sur le plan de projection.

\com \verb+orthographic(real x, real y, real z, triple up=Z)+ : La caméra (définie par x,y et z ) fixe ici un point à l'infini. La direction "up=Z" veut dire que la caméra est debout ..., un autre vecteur pourra la tourner sur un axe horizontal. Les droites parallèles sont représentées parallèlement.

\com \verb+perspective(real x, real y, real z, triple up=Z, triple target=O)+ est la perspective la plus réaliste, elle possède au moins un point de fuite vers lequel convergent les parallèles. Ce n'est pas la plus conforme aux exigences d'un cours de maths ...

Par défaut, la projection est \texttt{currentprojection=perspective(5,4,2);}.

Les figures suivantes montrent le cube unité selon les quatre perspectives.

\hspace{5mm}

\noindent\begin{minipage}{8cm}
 \begin{verbatim}
import geoespace;
size(4cm,0);
currentprojection=oblique;
label("obliqueX",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{verbatim}
\end{minipage}
\begin{minipage}{5cm}
\begin{asy}
import geoespace;
size(4cm,0);
currentprojection=oblique;
label("oblique",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{asy}
\end{minipage}

\noindent\begin{minipage}{8cm}
 \begin{verbatim}
import geoespace;
size(4cm,0);
currentprojection=obliqueX;
label("obliqueX",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{verbatim}
\end{minipage}
\begin{minipage}{5cm}
\begin{asy}
import geoespace;
size(4cm,0);
currentprojection=obliqueX;
label("obliqueX",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{asy}
\end{minipage}

\noindent\begin{minipage}{8cm}
 \begin{verbatim}
import geoespace;
size(4cm,0);
currentprojection=obliqueY;
label("obliqueY",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{verbatim}
\end{minipage}
\begin{minipage}{5cm}
\begin{asy}
import geoespace;
size(4cm,0);
currentprojection=obliqueY;
label("obliqueY",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{asy}
\end{minipage}

\noindent\begin{minipage}{8cm}
 \begin{verbatim}
import geoespace;
size(4cm,0);
currentprojection=orthographic(5,4,2);
label("orthographic",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{verbatim}
\end{minipage}
\begin{minipage}{5cm}
\begin{asy}
import geoespace;
size(4cm,0);
currentprojection=orthographic(5,4,2);
label("orthographic",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{asy}
\end{minipage}


\noindent\begin{minipage}{8cm}
 \begin{verbatim}
import geoespace;
size(4cm,0);
currentprojection=perspective(5,4,2);
label("perspective",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{verbatim}
\end{minipage}
\begin{minipage}{5cm}
\begin{asy}
import geoespace;
size(4cm,0);
currentprojection=perspective(5,4,2);
label("perspective",(0,0,1.1),nord);
pave((0,0,0),1,1,1);
label("$x$",(1,0,0),sud);
label("$y$",(0,1,0),sud);
label("$z$",(0,0,1),sud);
label("$O$",(0,0,0),sud);
\end{asy}
\end{minipage}
\section{Les directions}

\asym connaît les huit principaux points cardinaux comme variables de type <<pair>>: N pour le nord, S pour le sud,etc. Ces directions sont pratiques pour nommés les points mais interdisent d'utiliser certaines lettres : N,S,W,E...Ces directions sont renommées comme suit.

\hspace{5mm}

\noindent\begin{minipage}{8cm}
 \begin{verbatim}
import geoespace;
size(4cm,0);
label("nord",(0,0,2),nord);
label("sud",(0,0,-2),sud);
label("est",(0,-2,0),est);
label("ouest",(0,2,0),ouest);
label("nest",(0,-2,2),nest);
label("sest",(0,-2,-2),sest);
label("nouest",(0,2,2),nouest);
label("souest",(0,2,-2),souest);
draw((-2,0,0)--(2,0,0),red);
draw((0,0,-2)--(0,0,2),blue);
draw((0,-2,0)--(0,2,0),yellow*0.6);
draw((0,-2,-2)--(0,2,2),green*0.6);
draw((0,-2,2)--(0,2,-2),green*0.6);
pave((0,0,0),1,1,1);
\end{verbatim}
\end{minipage}
\begin{minipage}{5cm}
\begin{asy}
import geoespace;
size(4cm,0);
label("nord",(0,0,2),nord);
label("sud",(0,0,-2),sud);
label("est",(0,-2,0),est);
label("ouest",(0,2,0),ouest);
label("nest",(0,-2,2),nest);
label("sest",(0,-2,-2),sest);
label("nouest",(0,2,2),nouest);
label("souest",(0,2,-2),souest);
draw((-2,0,0)--(2,0,0),red);
draw((0,0,-2)--(0,0,2),blue);
draw((0,-2,0)--(0,2,0),yellow*0.6);
draw((0,-2,-2)--(0,2,2),green*0.6);
draw((0,-2,2)--(0,2,-2),green*0.6);
pave((0,0,0),1,1,1);
\end{asy}
\end{minipage}

\section{Les points}
\subsection{Tracé}

$\blacktriangleright$ \verb+pointe(triple A,pen p=currentpen)+ trace une croix en A sans nommer le point.

$\blacktriangleright$ \verb+nomme(Label L, triple position,pen p=currentpen)+ trace le point sur le pair <<position>> et place le texte contenu dans le <<label>> L.

\subsection{Construction}

$\blacktriangleright$ \verb+projortho(triple M, triple A, triple B, triple C)+ renvoie le projeté de M orthogonal sur le plan passant par A,B et C selon une normale à ce plan.

$\blacktriangleright$ \verb+intersectionDP(triple M,triple N, triple A, triple B, triple C)+ renvoie l'intersection de de (MN) avec le plan passant par A,B et C.

$\blacktriangleright$ \verb+intersectionDD(triple M,triple N, triple A, triple B)+ renvoie l'intersection de (MN) avec la droite (AB).

$\blacktriangleright$ \verb+pointsur(path3 chemin, real r)+ retourne un point sur un chemin avec le paramètre r entre 0 et 1.

$\blacktriangleright$ \verb+milieu(triple A, triple B)+ définit le milieu de [AB].

\hspace{5mm}

\noindent\begin{minipage}{8cm}
\begin{verbatim}
import geoespace;
size(5cm,0);
label("$x$",(2,0,0),sud);
label("$y$",(0,2,0),sud);
label("$z$",(0,0,2),nord);
label("$O$",(0,0,0),sud);
draw((-2,0,0)--(2,0,0),red);
draw((0,0,-2)--(0,0,2),blue);
draw((0,-2,0)--(0,2,0),yellow);
triple A,B,C,D,H,M;
A=(1,-1,-1);
B=(0,-1,1);
C=(0,1,-1);
D=(-1,0,2);
M=(-3,-2,0);
nomme("$A$",A,sud);
nomme("$B$",B,sud);
nomme("$C$",C,sud);
nomme("$D$",D,sud);
triple I=intersectionDD(A,D,B,C);
nomme("$I$",I,sud);
draw(A--D,cyan*0.6+dashed);
draw(B--C,cyan*0.6+dashed);
H=projortho(M,A,B,C);
nomme("$M$",M,sud);
nomme("$H$",H,sud);
draw(H--M,orange+dashed);
\end{verbatim}
\end{minipage}
\begin{minipage}{5cm}
\begin{asy}
import geoespace;
size(5cm,0);
label("$x$",(2,0,0),sud);
label("$y$",(0,2,0),sud);
label("$z$",(0,0,2),nord);
label("$O$",(0,0,0),sud);
draw((-2,0,0)--(2,0,0),red);
draw((0,0,-2)--(0,0,2),blue);
draw((0,-2,0)--(0,2,0),yellow);
triple A,B,C,D,H,M;
A=(1,-1,-1);
B=(0,-1,1);
C=(0,1,-1);
D=(-1,0,2);
M=(-3,-2,0);
nomme("$A$",A,sud);
nomme("$B$",B,sud);
nomme("$C$",C,sud);
nomme("$D$",D,sud);
triple I=intersectionDD(A,D,B,C);
nomme("$I$",I,sud);
draw(A--D,cyan*0.6+dashed);
draw(B--C,cyan*0.6+dashed);
H=projortho(M,A,B,C);
nomme("$M$",M,sud);
nomme("$H$",H,sud);
draw(H--M,orange+dashed);
\end{asy}
\end{minipage}


\section{Solides}
\subsection{Les pavés}

\com \verb+pave(triple A, real L, real p, real h)+ trace un parallélépipède rectangle dont A est un sommet (face arrière, en bas à gauche), de longueur L parallèlement à l'axe $(yy')$, de profondeur p parallèlement à $(xx')$ et de hauteur h parallélement à $(zz')$. 

La commande renvoie aussi les sommets du pavé dans un tableau de type \verb+triple[]+.

\noindent\begin{minipage}{8cm}
\begin{verbatim}
import geoespace;
currentprojection=obliqueX;
triple A,B,C,D,E;
size(6cm,0);
A=(0,0,0);
triple[] p=pave(A,4,2,3);
nomme("$A$",A,ouest,blue);
label("0",p[0],sud);
label("1",p[1],nord);
label("2",p[2],nord);
label("3",p[3],sud);
label("4",p[4],sud);
label("5",p[5],nord);
label("6",p[6],nord);
label("7",p[7],sud);
\end{verbatim}
\end{minipage}
\begin{minipage}{6cm}
\begin{asy}
import geoespace;
currentprojection=obliqueX;
triple A,B,C,D,E;
size(6cm,0);
A=(0,0,0);
triple[] p=pave(A,4,2,3);
nomme("$A$",A,ouest,blue);
label("0",p[0],sud);
label("1",p[1],nord);
label("2",p[2],nord);
label("3",p[3],sud);
label("4",p[4],sud);
label("5",p[5],nord);
label("6",p[6],nord);
label("7",p[7],sud);
\end{asy}
\end{minipage}

\subsection{Les prismes droits}
Il suffit de définir les points constitutifs de la base (et donc coplanaires), les sommets du prisme sont renvoyés dans un tableau de type \verb+triple[]+.

Les points numérotés à partir de 0 sont les poinrs de la base, pour un prisme à base triangulaire, 0 correspond à A, 1 à B et 2 à C.

Il y a plusieurs commandes en fonction du nombre de points de la base :

\com \verb+prisme(triple A, triple B, triple C, real h, pen sty=currentpen)+ trace un prisme à base triangulaire de hauteur h. 

\com \verb+prisme4(triple A, triple B, triple C, triple D, real h, pen sty=currentpen)+ trace un prisme à base quadrilatère de hauteur h. 

\com \verb+prisme5(triple A, triple B, triple C, triple D, triple E, real h, pen sty=currentpen)+ trace un prisme à base pentagonale de hauteur h. 

\hspace{5mm}

\noindent\begin{minipage}{8cm}
\begin{verbatim}
import geoespace;
currentprojection=perspective(8,7,5);
triple A,B,C,D,E;
size(6cm,0);
A=(0,0,0);
B=(0,5,0);
C=(0,3,3);
D=(0,0,3);
triple[] p=prisme4(A,B,C,D,4);
label("0",p[0],sud);
label("1",p[1],sud);
label("2",p[2],sud);
label("3",p[3],sud);
label("4",p[4],sud);
label("5",p[5],sud);
label("6",p[6],sud);
label("7",p[7],sud);
\end{verbatim}
\end{minipage}
\begin{minipage}{6cm}
\begin{asy}
import geoespace;
currentprojection=perspective(8,7,5);
triple A,B,C,D,E;
size(6cm,0);
A=(0,0,0);
B=(0,5,0);
C=(0,3,3);
D=(0,0,3);
triple[] p=prisme4(A,B,C,D,4);
label("0",p[0],sud);
label("1",p[1],sud);
label("2",p[2],sud);
label("3",p[3],sud);
label("4",p[4],sud);
label("5",p[5],sud);
label("6",p[6],sud);
label("7",p[7],sud);
\end{asy}
\end{minipage}

\subsection{Les pyramides}
\com \verb+tetraedre(triple A,triple B,triple C,triple D,pen sty=currentpen)+ trace un tetraèdre de sommet D et de base ABC.

\com \verb+pyramide(triple A,triple B,triple C,triple D, triple S, pen sty=currentpen)+ trace une pyramide de sommet S et de base ABCD.

\noindent\begin{minipage}{8cm}
\begin{verbatim}
import geoespace;
triple A,B,C,D;
size(6cm,0);
A=(0,0,0);
B=(0,3,0);
C=(-1.5,1.5,0);
D=(1,1,3);
tetraedre(A,B,C,D);
label("$A$",A,sud);
label("$B$",B,sud);
label("$C$",C,sud);
label("$D$",D,nord);
\end{verbatim}
\end{minipage}
\begin{minipage}{6cm}
\begin{asy}
import geoespace;
triple A,B,C,D;
size(6cm,0);
A=(0,0,0);
B=(0,3,0);
C=(-1.5,1.5,0);
D=(1,1,3);
tetraedre(A,B,C,D);
label("$A$",A,sud);
label("$B$",B,sud);
label("$C$",C,sud);
label("$D$",D,nord);
\end{asy}
\end{minipage}

\subsection{Les solides de revolution}
Ces macros utilisent celles du module \texttt{solids.asy}, le travail effectué ici porte sur la syntaxe et non pas sur la programmation

\com \verb+cylindre(triple O, real r, real h,triple axe=Z, pen sty=currentpen)+ trace le cylindre de centre O, de rayon R, de hauteur h et d'axe axe Z par défaut.

\com \verb+conerevolution(triple O, real r, real h,triple axe=Z, pen sty=currentpen)+ trace le cône de centre O, de rayon R, de hauteur h et d'axe axe Z par défaut

\noindent\begin{minipage}{8cm}
\begin{verbatim}
import geoespace;
triple A;
A=(0,0,0);
size(6cm,0);
conerevolution(A,2,3);
nomme("$A$",A,nord);
draw(A--(0,0,3.5),dashed);
\end{verbatim}
\end{minipage}
\begin{minipage}{6cm}
\begin{asy}
import geoespace;
triple A;
A=(0,0,0);
size(6cm,0);
conerevolution(A,2,3);
nomme("$A$",A,nord);
draw(A--(0,0,3.5),dashed+blue);
\end{asy}
\end{minipage}

\section{Mesure et codage}
\subsection{Cotation}
$\blacktriangleright$ \verb+cotemilieu(triple A,triple B, string texte, real d,pen sty=black)+ trace une flèche de A à B à d mm au dessus de (AB), le texte est au milieu.

$\blacktriangleright$ \verb+cote(triple A,triple B, string texte, real d,pen sty=black)+ trace une flèche de A à B à d mm au dessus de (AB), le texte est au dessus.

$\blacktriangleright$ \verb+hachurage(path p,real  espace, real angle, pen pen=currentpen)+ remplit avec des hachures espacées de "espace" mm, avec un angle de "angle" \degre le chemin fermé p.

\com \texttt{etiquette(triple A, triple B, string txt,string direction="dessus",pen sty=currentpen)} place le texte txt le long de [AB].

\subsection{Codage des longueurs et angles}
$\blacktriangleright$ \verb+code(triple[] K,int trait)+ code une série de segments dont les extrémités sont contenues dans une matrice de type <<triple[]>> qu'il faut définir au préalable. Le paramètre "trait" précise le codage :
\begin{description}
 \item[Si "trait" vaut 1, 2 ou 3] le segment est codé par des traits ...
\item[Si "trait" vaut 4] le segment est codé par un tilde.
\item[Si "trait" vaut 5] le segment est codé par un cercle.
 \end{description}

$\blacktriangleright$ \verb+codemilieu(triple A, triple B, int trait)+ est similaire à \verb+code+ mais plus simple syntaxiquement. 

$\blacktriangleright$ \verb+codeangle(triple A,triple B, triple C, int trait,int nbarc=1)+ marque l'angle $\widehat{ABC}$ par des traits et un ou plusieurs arcs de cercle. 

$\blacktriangleright$ \verb+angledroit(triple A,triple B,triple C,real taille=3mm, pen p=black)+ trace un carré (en perspective) codant l'angle $\widehat{ABC}$ qui est supposé droit.

\noindent\begin{minipage}{8cm}
\begin{verbatim}
import geoespace;
currentprojection=perspective(8,7,5);
triple A,B,C,D,E,F,G,H;
size(6cm,0);
A=(0,0,0);
B=(0,5,0);
C=(0,3,3);
D=(0,0,3);
triple[] p=prisme4(A,B,C,D,4);
E=p[4];
F=p[5];
G=p[6];
H=p[7];
angledroit(H,E,F);
codeangle(A,B,C,1);
triple[] seg={E,D,F,C,G,B,H,A};
hachurage(A--B--C--D--cycle,4,25,blue);
code(seg,2);
etiquette(E,D,"la hauteur du prisme");
\end{verbatim}
\end{minipage}
\begin{minipage}{6cm}
\begin{asy}
import geoespace;
currentprojection=perspective(8,7,5);
triple A,B,C,D,E,F,G,H;
size(6cm,0);
A=(0,0,0);
B=(0,5,0);
C=(0,3,3);
D=(0,0,3);
triple[] p=prisme4(A,B,C,D,4);
E=p[4];
F=p[5];
G=p[6];
H=p[7];
angledroit(H,E,F);
codeangle(A,B,C,1);
triple[] seg={E,D,F,C,G,B,H,A};
hachurage(A--B--C--D--cycle,4,25,blue);
code(seg,2);
etiquette(E,D,"la hauteur du prisme");
\end{asy}
\end{minipage}


\section{Segments}
$\blacktriangleright$ La commande \verb+segment(triple A, triple B,real a=0)+ renvoie le chemin [AB] et permet de faire dépasser le trait de $a$ cm de part et d'autre des extrémités.

\section{Cercles}
\com \verb+cercle(triple O, triple A, triple E, triple F, triple G)+ renvoie un cercle de centre O et passant par A dans le plan EFG.

\com \verb+cercleR(triple O, real R, triple A, triple B)+ renvoie un cercle de centre O et de rayon R le plan OAB.

\noindent\begin{minipage}{8cm}
\begin{verbatim}
import geoespace;
currentprojection=perspective(8,7,5);
triple A;
size(6cm,0);
A=(0,0,0);
triple[] p=pave(A,3,3,3);
draw(cercle((1.5,1.5,0),A,A,p[3],p[4]),
dashed+red);
draw(cercleR(milieu(p[4],p[2]),
1.5,p[4],p[5]),green);
draw(segment(A,milieu(p[4],
p[2]),1),blue+dashed);
\end{verbatim}
\end{minipage}
\begin{minipage}{6cm}
\begin{asy}
import geoespace;
currentprojection=perspective(8,7,5);
triple A;
size(6cm,0);
A=(0,0,0);
triple[] p=pave(A,3,3,3);
draw(cercle((1.5,1.5,0),A,A,p[3],p[4]),dashed+red);
draw(cercleR(milieu(p[4],p[2]),1.5,p[4],p[5]),green);
pointe((1.5,1.5,0));
pointe(milieu(p[4],p[2]));
draw(segment((1.5,1.5,0),milieu(p[4],p[2]),1),blue+dashed);
\end{asy}
\end{minipage}
\end{document}

 

Validation CSS Validation XHTMLSyracuse — Dernière modification : 17 mars 2008 (0.06s - 3483932 - 8 septembre 2008) vers le haut