2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 03:05 


28/11/11
2884
Нужно нарисовать маленький фрагмент "сетки" из правильных шестиугольников (аля соты). Как рисовать многоугольник в TiKz я прочитал, но именно шестиугольники сложно будет рисовать покоординатно.

Нашёл несколько возможностей рисовать правильные шестиугольники быстро, но не пониманию как их расположить вплотную друг к другу.

Вот пример:
Код:
\begin{tikzpicture}[scale=1]
    \tikzstyle{ann} = [draw=none,fill=none,right]
    \matrix[nodes={draw, thick, fill=white},
        row sep=0.5cm,column sep=0.5cm] {

    \node at (0, 0) [regular polygon,regular polygon sides=6] {dxdy};&
    \node at (0, 0) [regular polygon,regular polygon sides=6] {dxdy};&
    \node[regular polygon,regular polygon sides=4] {$i,j$};\\
    };
\end{tikzpicture}

Ставлю одинаковые координаты, но они все равно сильно разнесены. Никак их поправить "в минус по $x$" мне не удалось.

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 07:10 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
Полный пример? С преамбулой включая все пакеты и библиотеки

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 09:33 


01/12/11

1047
Так можно нарисовать сетку , используя команду \multiput
$$\multiput(0,0)(10,0){10} {\line(0,1){50}}
%{\usebox{\blok}}
\multiput(0,0)(0,10){6} {\line(1,0){90}}
\end{picture}$$

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 10:11 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
Используется синтаксис LaTeX
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}[scale=1]
    \tikzstyle{ann} = [draw=none,fill=none,right]
    \matrix[nodes={draw, thick, fill=white},
        row sep=0.5cm,column sep=0.5cm] {
 \node at (0, 0) [regular polygon,regular polygon sides=6] {dxdy};
    \node at (1.65, 0) [regular polygon,regular polygon sides=6] {dxdy};  
     \node at (2.95, 0) [regular polygon,regular polygon sides=4] {$i,j$};\\
    };
\end{tikzpicture}
\end{document}


Т.е. убрать & и доработать позиции вручную

Skeptic note the question was about tikz not built in LaTeX far less capable graphical commands.

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 12:53 


01/12/11

1047
Red_Herring, если вы не умеете пользоваться кнопкой "цитата", то пожалуйста.
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass{article}
\begin{document}
\begin{center}
\end{center}
<img src='https://dxdy-02.korotkov.co.uk/f/d/c/a/dca793c3e67b09b64bb90620501fc32282.png'  class="latexcenter" alt="$$
\begin{picture}(200,200)
\multiput(0,0)(0,40){5}{\multiput(10,0)(20,0){10}{\line(1,1){10}}}
\multiput(0,0)(0,40){5} {\multiput(0,10)(20,0){10} {\line(1,-1){10}}}
\multiput(-10,20)(0,40){5}{\multiput(10,0)(20,0){10}{\line(1,1){10}}}
\multiput(10,20)(0,40){5} {\multiput(0,10)(20,0){10} {\line(1,-1){10}}}
\multiput(0,0)(0,40){5} {\multiput(0,10)(20,0){11} {\line(0,1){10}}}
\multiput(10,20)(0,40){4} {\multiput(0,10)(20,0){10} {\line(0,1){10}}}
\end{picture}
$$" title="$$
\begin{picture}(200,200)
\multiput(0,0)(0,40){5}{\multiput(10,0)(20,0){10}{\line(1,1){10}}}
\multiput(0,0)(0,40){5} {\multiput(0,10)(20,0){10} {\line(1,-1){10}}}
\multiput(-10,20)(0,40){5}{\multiput(10,0)(20,0){10}{\line(1,1){10}}}
\multiput(10,20)(0,40){5} {\multiput(0,10)(20,0){10} {\line(1,-1){10}}}
\multiput(0,0)(0,40){5} {\multiput(0,10)(20,0){11} {\line(0,1){10}}}
\multiput(10,20)(0,40){4} {\multiput(0,10)(20,0){10} {\line(0,1){10}}}
\end{picture}
$$" />
\end{document}


$$
\begin{picture}(200,200)
\multiput(0,0)(0,40){5}{\multiput(10,0)(20,0){10}{\line(1,1){10}}}
\multiput(0,0)(0,40){5} {\multiput(0,10)(20,0){10} {\line(1,-1){10}}}
\multiput(-10,20)(0,40){5}{\multiput(10,0)(20,0){10}{\line(1,1){10}}}
\multiput(10,20)(0,40){5} {\multiput(0,10)(20,0){10} {\line(1,-1){10}}}
\multiput(0,0)(0,40){5} {\multiput(0,10)(20,0){11} {\line(0,1){10}}}
\multiput(10,20)(0,40){4} {\multiput(0,10)(20,0){10} {\line(0,1){10}}}
\end{picture}
$$

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 13:59 


28/11/11
2884
Red_Herring, Skeptic, спасибо за Ваши примеры! Извините, что код своего примера привёл не полностью, не подумал.

Red_Herring, Вы как координаты $1.65$ и $2.95$ в получили? Просто на глаз подгоняли, или как-то получше?

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 14:18 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
На глаз.

Используется синтаксис LaTeX
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=1]
\foreach \x in {0,3,...,12}
\foreach \y in {0,2,...,12}  {\draw[xshift=\x cm, yshift=0.86602540378444* \y cm]  (-1,0) -- (-.5, 0.86602540378444)--(.5,0.86602540378444)--(1,0)--(.5,-0.86602540378444)--(-.5,-0.86602540378444)--(-1,0);  \draw[xshift=\x cm, yshift=0.86602540378444* \y cm] (-2,0)--(-1,0); } \end{tikzpicture}
\end{document}

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 15:38 


28/11/11
2884
Вау, вот это шикарно!!!

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение31.01.2015, 16:57 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
Try this
Используется синтаксис LaTeX
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=1]
\clip (-.5,0) rectangle (26,25);
\foreach \x in {0,3,...,24} \foreach \y in {0,6,...,24}  {\filldraw[xshift=\x cm, yshift=0.86602540378444* \y cm, fill=red]  (-1,0) -- (-.5, 0.86602540378444)--(.5,0.86602540378444)--(1,0)--(.5,-0.86602540378444)--(-.5,-0.86602540378444)--(-1,0);  }
\foreach \x in {0,3,...,24} \foreach \y in {2,8,...,26}  {\filldraw[xshift=\x cm, yshift=0.86602540378444* \y cm, fill=blue]  (-1,0) -- (-.5, 0.86602540378444)--(.5,0.86602540378444)--(1,0)--(.5,-0.86602540378444)--(-.5,-0.86602540378444)--(-1,0);  }
\foreach \x in {0,3,...,24} \foreach \y in {4,10,...,28}  {\filldraw[xshift=\x cm, yshift=0.86602540378444* \y cm, fill=cyan]  (-1,0) -- (-.5, 0.86602540378444)--(.5,0.86602540378444)--(1,0)--(.5,-0.86602540378444)--(-.5,-0.86602540378444)--(-1,0);  }
\foreach \x in {1.5,4.5,...,25.5} \foreach \y in {3,9,...,27}  {\filldraw[xshift=\x cm, yshift=0.86602540378444* \y cm, fill=red]  (-1,0) -- (-.5, 0.86602540378444)--(.5,0.86602540378444)--(1,0)--(.5,-0.86602540378444)--(-.5,-0.86602540378444)--(-1,0);  }
\foreach \x in {1.5,4.5,...,25.5} \foreach \y in {1,7,...,25}  {\filldraw[xshift=\x cm, yshift=0.86602540378444* \y cm, fill=cyan]  (-1,0) -- (-.5, 0.86602540378444)--(.5,0.86602540378444)--(1,0)--(.5,-0.86602540378444)--(-.5,-0.86602540378444)--(-1,0);  }
\foreach \x in {1.5,4.5,...,25.5} \foreach \y in {5,11,...,29}  {\filldraw[xshift=\x cm, yshift=0.86602540378444* \y cm, fill=blue]  (-1,0) -- (-.5, 0.86602540378444)--(.5,0.86602540378444)--(1,0)--(.5,-0.86602540378444)--(-.5,-0.86602540378444)--(-1,0);  }
\end{tikzpicture}
\end{document}

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение01.02.2015, 01:23 


28/11/11
2884
Афигительно красиво!!! <3

Выглядит это в ухудшенном качестве так (вдруг кто хочет глянуть не затехав):

(Оффтоп)

Изображение

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение01.02.2015, 02:17 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
К сожалению, хотя никаких библиотек (\usetikzlibrary) не требуется, форумный LaTeX не обеспечивает полной поддежки tikz (не работают \foreach и {scope}, например)

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение01.02.2015, 02:39 


28/11/11
2884
Red_Herring, а по "науке" всевозможные графики (не странные картинки, а именно графики) в R делают, или TiKz'ом техают?

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение01.02.2015, 03:25 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
longstreet в сообщении #972097 писал(а):
Red_Herring, а по "науке" всевозможные графики (не странные картинки, а именно графики) в R делают, или TiKz'ом техают?


Я все время их делаю иллюстрации с помощью tikz, но если хочется строить графики, то нужно установить gnuplot и "latex --shell-escape" или "pdflatex --shell-escape"

Используется синтаксис LaTeX
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[domain=-2:2]
\draw[very thin,color=gray] (-2.2,-3.1) grid (3.9,3.9);
\draw[->] (-2.1,0) -- (4.2,0) node[right] {$x$};
\draw[->] (0,-3.2) -- (0,4.2) node[above] {$f(x)$};
\draw[thick,color=blue] plot[id=sinh] function{sinh(x)} node[right] {$f(x) = \sinh x$};
\draw[thick,color=red] plot[id=cosh] function{cosh(x)} node[left] {$f(x) = \cosh x$};
\draw[thick,color=brown] plot[id=tanh] function{tanh(x)} node[right] {$f(x) = \tanh x$};
\end{tikzpicture}\end{document}
 

Можно использовать octave (которая использует gnuplot для рисования графиков

Цитата:
А можно сделать так, чтобы координаты вершин автоматически лейблом приписывались рядом с вершинами? Как-то видел такое, кажется.


Не знаю. Но можно, конечно, наставить кучу точек и дать их координаты так же как я сделал но с \node вместо \draw

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение01.02.2015, 04:23 


28/11/11
2884
Red_Herring в сообщении #972102 писал(а):
А можно сделать так, чтобы координаты вершин автоматически лейблом приписывались рядом с вершинами? Как-то видел такое, кажется.

Нашёл, действительно можно: http://tex.stackexchange.com/questions/179843/make-a-polygon-with-automatically-labelled-nodes-according-to-their-coordinates

 Профиль  
                  
 
 Re: Как нарисовать несколько шестиугольников рядом?
Сообщение01.02.2015, 06:11 


28/11/11
2884
Я нашёл такой пример кода:
Код:
\documentclass[12pt,tikz,border=0pt]{standalone}

\usetikzlibrary{shapes.geometric}
\newcommand\hexagonosize{30mm}
\tikzset{%
    hexagono/.style={draw,shape=regular polygon,regular polygon sides=6,minimum size=\hexagonosize,
                     inner sep=0pt,outer sep=0pt,shape border rotate=90},
}

\begin{document}

\begin{tikzpicture}
\node[hexagono] (centro) at (0,0) {};
\node[hexagono, anchor=180] (A) at (centro.0)   {A};
\node[hexagono, anchor=240] (B) at (centro.60)  {B};
\node[hexagono, anchor=300] (C) at (centro.120) {C};
\node[hexagono, anchor=0]   (D) at (centro.180) {D};
\node[hexagono, anchor=60]  (E) at (centro.240) {E};
\node[hexagono, anchor=120] (F) at (centro.300) {F};
\end{tikzpicture}

\end{document}


Кажется, такой способ управления объектами лучше координатного. Например, можно менять ширину линий так, чтобы картинка в целом не съезжалась/разъезжалась.

Как тут работают anchor и centro.? Они как-то связаны, но не могу разобраться как. Нагуглить хорошего объяснения тоже не смог.

Например, я хочу "допилить" этот пример, поставив ещё один ряд окружения шестиугольниками. Что я должен делать?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group