[Tikz] Segments

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
plaurain
Utilisateur débutant
Utilisateur débutant
Messages : 2
Inscription : jeudi 30 décembre 2010, 10:52

[Tikz] Segments

Message 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}
Dernière modification par MB le jeudi 30 décembre 2010, 12:52, modifié 2 fois.
Raison : Ajout de balises code.

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: [Tikz] Segments

Message par chellier »

En attendant qu'une réponse avec Tikz (que je ne connais pratiquement pas :oops: ) arrive, en voici une avec asymptote :
{}

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

evariste_G
Utilisateur chevronné
Utilisateur chevronné
Messages : 1452
Inscription : vendredi 19 décembre 2008, 19:13
Localisation : Bordeaux

Re: [Tikz] Segments

Message 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 ...
Mathématiques, LaTeX et Python : http://www.mathweb.fr

plaurain
Utilisateur débutant
Utilisateur débutant
Messages : 2
Inscription : jeudi 30 décembre 2010, 10:52

Re: [Tikz] Segments

Message 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?

evariste_G
Utilisateur chevronné
Utilisateur chevronné
Messages : 1452
Inscription : vendredi 19 décembre 2008, 19:13
Localisation : Bordeaux

Re: [Tikz] Segments

Message 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);
Mathématiques, LaTeX et Python : http://www.mathweb.fr

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Segments

Message 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

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}
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

Altermundus
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 557
Inscription : lundi 28 mai 2007, 10:31
Statut actuel : Autre
Localisation : Paris

Re: [Tikz] Segments

Message 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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.