3

In the following example, why there is no blue triangle ?

\documentclass[a4paper]{article}
\usepackage[marginparsep=3pt, top=2cm, bottom=1.5cm, left=3cm, right=1.5cm]{geometry}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}

\tikzset{small dot/.style={fill=black,circle,scale=0.3},}

\begin{document}
\begin{tikzpicture}

\coordinate (A0) at (0,0) ;
\coordinate (A1) at (1,0) ;
\coordinate (A2) at (0,1) ;

\draw[fill=red] (A0)--(A1)--(A2)--cycle ;

\draw ($ (A0)!.5!(A1) $) node (E0) {};  
\draw ($ (A1)!.5!(A2) $) node (E1) {};  
\draw ($ (A2)!.5!(A0) $) node (E2) {};  

\draw[fill=blue] (E0)--(E1)--(E2)--cycle ;

\end{tikzpicture}
\end{document}

enter image description here

It is just a simple sample of the problem I have. As I need to use let...in... to calculate between ! ! coefficient, I use this definition of nodes for the Ex nodes. If there is another way or how to correct the blue triangle drawing.

One can tcheat :

\draw ($ (A0)!.5!(A1) $) node (E0) {};  
\draw ($ (A1)!.5!(A2) $) node (E1) {};  
\draw ($ (A2)!.5!(A0) $) node (E2) {};  

\coordinate (B0) at (E0) ;
\coordinate (B1) at (E1) ;
\coordinate (B2) at (E2) ;


\draw[fill=blue] (B0)--(B1)--(B2)--cycle ;

works fine, but why i doesn't work at first time ?

4

nodes are not geometric points but occupy space even if they don't have content. This is because they have inner sep and outer separations. When you artie

\draw[fill=blue] (E0)--(E1)--(E2)--cycle ;

you are not giving from which point of node the lines should be drawn as no anchors are specified in the above line of code. Please note that a coordinate is a geometric point and thus you can draw straight from it. Therefore to draw from a node, a proper anchor must be specified like (E0.center). On the other hand, instead of a node, you can define a coordinate straight away as ferahfeza did in his answer, or simply define node as a coordinate in the following manner:

node[coordinate] (E0) {};

or

node[inner sep=0pt,outer sep=0pt] (E0) {};

Both of these work. But if you adopt the latter, you still have to give the anchors like (E0.center).

A sample code:

\documentclass[a4paper]{article}
\usepackage[marginparsep=3pt, top=2cm, bottom=1.5cm, left=3cm, right=1.5cm]{geometry}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}

\tikzset{small dot/.style={fill=black,circle,scale=0.3},}

\begin{document}
\begin{tikzpicture}

\coordinate (A0) at (0,0) ;
\coordinate (A1) at (1,0) ;
\coordinate (A2) at (0,1) ;

\draw[fill=red] (A0)--(A1)--(A2)--cycle ;

\path ($ (A0)!.5!(A1) $) node[inner sep=0pt,outer sep=0pt] (E0) {};
\path ($ (A1)!.5!(A2) $) node[inner sep=0pt,outer sep=0pt] (E1) {};
\path ($ (A2)!.5!(A0) $) node[inner sep=0pt,outer sep=0pt] (E2) {};

\draw[fill=blue] (E0.north)--(E1.center)--(E2.east)--cycle ;

\end{tikzpicture}
\end{document}

enter image description here

Please note that, instead of giving center as the anchor from which to draw, I have chosen appropriate anchors (in a failed attempt) so that the blue triangle corners don't protrude out of the red triangle. Moral is, when you want coordinate, define one and not nodes.

4

Define node's as coordinate:

\documentclass[a4paper]{article}
\usepackage[marginparsep=3pt, top=2cm, bottom=1.5cm, left=3cm, right=1.5cm]{geometry}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}

%\tikzset{small dot/.style={fill=black,circle,scale=0.3},}

\begin{document}
\begin{tikzpicture}

\coordinate (A0) at (0,0) ;
\coordinate (A1) at (1,0) ;
\coordinate (A2) at (0,1) ;

\draw [fill=red] (A0)--(A1)--(A2)--cycle ;

\coordinate (E0) at ($ (A0)!.5!(A1) $);  
\coordinate (E1) at ($ (A1)!.5!(A2) $);  
\coordinate (E2) at ($ (A2)!.5!(A0) $)  ;  

\draw [fill=blue] (E0)--(E1)--(E2)--cycle ;

\end{tikzpicture}
\end{document}
  • I was my firt thaught but I need to use let...in to calculate the coordinates and none of this works : \coordinate let \p1=(A0) in (E0) at ($ (A0)!.5!(A1) $); \coordinate (E1) at \p1=(A0) in ($ (A1)!.5!(A2) $); . This examples are useless, but it's just for example. – Tarass Feb 26 '14 at 13:04
  • But one can tcheat, I add an edit. – Tarass Feb 26 '14 at 13:07
  • Sorry I edited your message instead of mine, excuse me please. And thank you. – Tarass Feb 26 '14 at 13:12
  • 1
    I erroneously approved Tarass edit. @Tarass: the modification you're suggesting is working, but not in your original example. Though, even your original example could work: add the option [coordinate] to all nodes. Then, have a look to the difference between nodes and coordinates: on this site there are good references. – Claudio Fiandrino Feb 26 '14 at 13:12
  • @Claudio Fiandrino: I check no difference between my cheat and your good solution. I keep yours ;-) thank you. – Tarass Feb 26 '14 at 13:18
3

A compact solution without calc based on default options.

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=5]
\draw[fill=red]   (0,0) -- coordinate (E0)(1,0) 
                        -- coordinate (E1)(0,1) 
                        -- coordinate (E2) 
                           cycle ;   
\draw[fill=blue] (E0)--(E1)--(E2)--cycle ;
\end{tikzpicture}
\end{document}

enter image description here

  • Thank you Alain. The solution must but let ... in syntaxly compatible. The best, for what I have to do, was \draw[coordinate] ($ (A0)!.5!(A1) $) node (E0) {};. – Tarass Feb 26 '14 at 15:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.