Page 1 sur 1

[Tikz] Segments

MessagePosté: Jeudi 30 Décembre 2010, 11:00
par plaurain
Dans la figure suivante, j'aimerais que les traits qui servent à indiquer que les segments sont de même longueurs soient bien orientés et pouvoir régler leur taille et leur épaisseur. Que faire?
Merci d'avance.

Code: Tout sélectionner
\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{patterns}
\begin{document}

\begin{tikzpicture}
\filldraw  (0,0) circle (1.5pt) node[left] {$A$};
\filldraw (3,2)  circle (1.5pt) node[above] {$B$};
\filldraw (4,0)  circle (1.5pt) node[below] {$C$};

\draw (2.5,1) node[below] {$P$};

\draw(0,0)-- (4,0);
\draw (3,2)--(4,0);
\draw (3,2)--(0,0);

\draw (2.5,1) -- (4,0);
\draw (2.5,1) -- node[midway] {$\Vert$} (3,2);
\draw (2.5,1) -- node[midway] {$\vert$} (0,0);

\draw[rotate=60] (0,0)--(3,2);
\draw[rotate=60] (3,2) --node[midway] {$\Vert$} (2.5,1);
\draw[rotate=60] (0,0) -- node[midway] {$-$}  (2.5,1);

\draw (-0.8,4) node[below] {$C'$};
\draw (0.8,2.2) node[below] {$P'$};

\draw (0.38,2.67) --  node[midway] {$\vert$} (2.5,1);
\end{tikzpicture}

\end{document}

Re: [Tikz] Segments

MessagePosté: Jeudi 30 Décembre 2010, 14:22
par chellier
En attendant qu'une réponse avec Tikz (que je ne connais pratiquement pas :oops: ) arrive, en voici une avec asymptote :

8e1871047f45751c0930696e8a3e56eb.png

Code: Tout sélectionner
import markers;
unitsize(1cm);
pair A=(0,0), B=(3,2), C=(4,0),P=(2.5,1);
pair P1=rotate(60)*P, C1=rotate(60)*B;

dot("$A$",A,W); dot("$B$",B,N); dot("$C$",C,S);
label("$P$",P,S); label("$P'$",P1,NE); label("$C'$",C1,W);

draw(A--B--C--cycle^^P--C^^A--C1);

draw(A--P,StickIntervalMarker(i=1,n=1,size=3mm,angle=0,p=linewidth(bp)));
draw(P--P1,StickIntervalMarker(i=1,n=1,size=3mm,angle=25,p=linewidth(bp)));
draw(P1--A,StickIntervalMarker(i=1,n=1,size=3mm,angle=-25,p=linewidth(bp)));
draw(B--P,StickIntervalMarker(i=1,n=2,angle=-25,p=blue));
draw(C1--P1,StickIntervalMarker(i=1,n=2,angle=25,p=blue));

Code: Tout sélectionner
\documentclass[10pt]{article}
\usepackage{asymptote}
\begin{document}

\begin{asy}
import markers;
unitsize(1cm);
pair A=(0,0), B=(3,2), C=(4,0),P=(2.5,1);
pair P1=rotate(60)*P, C1=rotate(60)*B;

dot("$A$",A,W); dot("$B$",B,N); dot("$C$",C,S);
label("$P$",P,S); label("$P'$",P1,NE); label("$C'$",C1,W);

draw(A--B--C--cycle^^P--C^^A--C1);

// Paramètres pouvant être modifiés :
//marker StickIntervalMarker(int i=2, int n=1, real size=0, real space=0,
//                           real angle=0, pair offset=0, bool rotated=true,
//                           pen p=currentpen, frame uniform=newframe,
//                           bool above=true)

draw(A--P,StickIntervalMarker(i=1,n=1,size=3mm,angle=0,p=linewidth(bp)));
draw(P--P1,StickIntervalMarker(i=1,n=1,size=3mm,angle=25,p=linewidth(bp)));
draw(P1--A,StickIntervalMarker(i=1,n=1,size=3mm,angle=-25,p=linewidth(bp)));
draw(B--P,StickIntervalMarker(i=1,n=2,angle=-25,p=blue));
draw(C1--P1,StickIntervalMarker(i=1,n=2,angle=25,p=blue));
\end{asy}

\end{document}


Christophe

Re: [Tikz] Segments

MessagePosté: Jeudi 30 Décembre 2010, 17:27
par evariste_G
Bonjour.
Une méthode pourrait être d'ajouter des options à "node" :

Code: Tout sélectionner
\draw[rotate=60] (3,2) --node[midway,rotate=...,scale=...] {$\Vert$} (2.5,1);


où :

* rotate est l'angle de rotation
* scale l'échelle

Mais il doit y avoir mieux ...

Re: [Tikz] Segments

MessagePosté: Jeudi 30 Décembre 2010, 17:33
par plaurain
Merci pour ta réponse qui marche bien. Mais en fait je me demandais s'il n'était pas possible de faire comme pour une décoration et que la marque s'oriente toute seule?

Re: [Tikz] Segments

MessagePosté: Jeudi 30 Décembre 2010, 18:12
par evariste_G
En effet, c'est possible avec la librairie decorations.markings (voir page 268-269 de la doc officielle).

En gros :

Code: Tout sélectionner
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
...
\draw[decoration={markings,mark=at 1/2 with {\draw (-2pt,-2pt) -- (2pt,2pt); \draw (2pt,-2pt) -- (-2pt,2pt);}}] (0,0) -- (2,8);

Re: [Tikz] Segments

MessagePosté: Jeudi 30 Décembre 2010, 18:14
par pg
Voici une façon de faire. Il suffit de changer les définitions des styles memelongueur ou mmemelongueur pour changer la couleur, l'épaisseur du trait ou l'inclinaison.

memelongueur.png
memelongueur.png (6.77 Kio) Vu 1370 fois


Code: Tout sélectionner
\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{decorations.markings}

\begin{document}

\tikzstyle{memelongueur}=[decoration={markings,
  mark=at position .5 with {\draw (0pt,-4pt) -- (0pt,4pt);}},
  postaction={decorate}]
\tikzstyle{mmemelongueur}=[decoration={markings,
  mark=at position .5 with {\draw (-1pt,-4pt) -- (-1pt,4pt);
                            \draw (1pt,-4pt) -- (1pt,4pt);}},
  postaction={decorate}]

\begin{tikzpicture}
\filldraw (0,0) circle (1.5pt) node[left] {$A$};
\filldraw (3,2) circle (1.5pt) node[above] {$B$};
\filldraw (4,0) circle (1.5pt) node[below] {$C$};

\node[below] at (2.5,1) {$P$};

\draw (0,0)-- (4,0);
\draw (3,2)--(4,0);
\draw (3,2)--(0,0);

\draw (2.5,1) -- (4,0);
\draw[mmemelongueur] (2.5,1) -- (3,2);
\draw[memelongueur] (2.5,1) -- (0,0);

\draw[rotate=60] (0,0)--(3,2) node[left] {$C'$};
\draw[rotate=60,mmemelongueur] (3,2) -- (2.5,1) node[above right] {$P'$};
\draw[rotate=60,memelongueur] (0,0) -- (2.5,1);

\draw[memelongueur] (0.38,2.67) -- (2.5,1);
\end{tikzpicture}

\end{document}

Re: [Tikz] Segments

MessagePosté: Samedi 01 Janvier 2011, 23:57
par Altermundus
Cela arrive en version finale dans quelques jours sur CTan
Code: Tout sélectionner
\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[upright]{fourier}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usepackage[frenchb]{babel}
\definecolor{fondpaille}{cmyk}{0,0,0.1,0}
\pagecolor{fondpaille}
\color{Maroon}   
\tkzSetUpColors[background=fondpaille,text=Maroon]   
\begin{document}

\begin{tikzpicture}
  \tkzDefPoint(0,0){A}
  \tkzDefPoint(3,2){B}
  \tkzDefPoint(4,0){C}
  \tkzDefPoint(2.5,1){P}
  \tkzDrawPolygon(A,B,C)
  \tkzDefEquilateral(A,P) \tkzGetPoint{P'}
  \tkzDefPointsBy[rotation=center A angle 60](P,B){P',C'}
  \tkzDrawPolygon(A,P,P')
  \tkzDrawPolySeg(P',C',A,P,B)
  \tkzDrawSegment(C,P)
  \tkzDrawPoints(A,B,C,C',P,P')
 
  \tkzMarkSegments[mark=s|,mark size=6pt,color=blue](A,P P,P' P',A)
  \tkzMarkSegments[mark=||,color=orange](B,P P',C')
   
   \tkzLabelPoints(A,C)
   \tkzLabelPoints[above right](P',C',B)
   \tkzLabelPoints[below](P)
\end{tikzpicture}

\end{document} 


On peut changer les marqueurs, il y a un peu de tout, par exemple pour les traits on a soit |, || et |||
ou s|, s|| et s||| les premiers sont perpendiculaires aux segments, les autres penchés (s=slanted) mais
on peut définir ces propres marqueurs

Alain Matthes