[Tikz] Segments

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
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

[Tikz] Segments

Message non lu 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 honoraire
Modérateur honoraire
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot
Contact :

Re: [Tikz] Segments

Message non lu par chellier »

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

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 : 1481
Inscription : vendredi 19 décembre 2008, 19:13
Statut actuel : Enseignant
Localisation : Bordeaux
Contact :

Re: [Tikz] Segments

Message non lu 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 : https://www.mathweb.fr
Cours particuliers de maths par webcam: https://courspasquet.fr
Trouver un vrai prof pour des cours particuliers: https://lesvraisprofs.mathweb.fr/
plaurain

Re: [Tikz] Segments

Message non lu 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 : 1481
Inscription : vendredi 19 décembre 2008, 19:13
Statut actuel : Enseignant
Localisation : Bordeaux
Contact :

Re: [Tikz] Segments

Message non lu 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 : https://www.mathweb.fr
Cours particuliers de maths par webcam: https://courspasquet.fr
Trouver un vrai prof pour des cours particuliers: https://lesvraisprofs.mathweb.fr/
pg
Modérateur spécialisé
Modérateur spécialisé
Messages : 2613
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Segments

Message non lu 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) Consulté 2325 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}
Altermundus
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 557
Inscription : lundi 28 mai 2007, 10:31
Statut actuel : Autre
Localisation : Paris
Contact :

Re: [Tikz] Segments

Message non lu 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
Pièces jointes
Capture d’écran 2011-01-01 à 23.53.44.png
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message