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
11522
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
11522
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
11522
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
11522
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
11522
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
11522
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, Супермодераторы



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

Сейчас этот форум просматривают: YandexBot [bot]


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

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