7

I want to draw a work of Mongolian calligraphy below.

enter image description here

There are some problems when I scaled it as follows.

enter image description here

enter image description here

Here is my attempt with TikZ.

\begin{tikzpicture}[xscale=0.5,yscale=0.5]
\draw[fill,black] (0,0) circle (1cm);
\draw [white,thick,line width=0.7mm,domain=266:94] plot ({0+(0.9*cos(\x))},
     {0+(0.9*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=4:90] plot ({0+(0.9*cos(\x))},
     {0+(0.9*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=270:352] plot ({0+(0.9*cos(\x))},         {0+(0.9*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=94:176] plot ({0+(0.75*cos(\x))},         {0+(0.75*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=188:266] plot ( 
{0+(0.75*cos(\x))}, {0+(0.75*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=82:-82] plot  ( {0+(0.75*cos(\x))}, {0+(0.75*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=94:266] plot ({0+(0.6*cos(\x))},
     {0+(0.6*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=270:352] plot ({0+(0.6*cos(\x))},         {0+(0.6*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=4:90] plot ({0+(0.6*cos(\x))},         {0+(0.6*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=94:266] plot  ( {0+0.45*cos(\x))},         {0+(0.45*sin(\x))});
\draw [white,thick,line width=0.7mm,domain=90:-90] plot  ({0+(0.45*cos(\x))},{0+(0.45*sin(\x))});
\draw[fill,white] (0,0) circle (0.3);
\draw[fill,black] (0.8,0)--(0.8,0.07)--(0.96,0.07)--(0.96,0)--cycle;
\draw[fill,black] (0.5,0)--(0.5,0.07)--(0.7,0.07)--(0.7,0)--cycle;
\draw[fill,white] (1.1,0)--(1.1,-0.07)--(0.45,-0.07)--(0.45,0)--cycle;
\draw[fill, black](-0.07,0.35)--(0,0.35)--(0,0.96)--(-0.07,0.96)--cycle;
\draw[fill,white](0.009,0.43)--(0.0836,0.43)--(0.0836,0.9)--(0.009,0.9)--cycle;    
\draw[fill,black](0.1,0.7)--(0.1537,0.7)--(0.1537,0.8)--(0.1,0.8)--cycle;
\draw[fill,white] (0,0)--(0,-0.07)--(-1.1,-0.07)--(-1.1,0)--cycle;
\draw[fill,white](0,-0.45)--(0.0836,-0.45)--(0.0836,-0.9)--(0,-0.90)--cycle;
\draw[fill, black](-0.07,-0.35)--(0,-0.35)--(0,-0.96)--(-0.07,-0.96)--cycle;
\draw[fill,black](-0.65,0.02)--(-0.83,0.02)--(-0.83,0.07)--(-0.65,0.07)--cycle;
\draw[fill,black](-0.65,-0.1)--(-0.83,-0.1)--(-0.83,-0.14)--(-0.65,-0.14)--cycle;
\draw[fill,black](0.5,-0.085)--(0.66,-0.085)--(0.66,-0.14)--(0.5,-0.14)--cycle;
\draw[fill,black](0.8,-0.089)--(0.96,-0.089)--(0.96,-0.14)--(0.8,-0.14)--cycle;
\draw[fill,black](0.1,-0.7)--(0.1537,-0.7)--(0.1537,-0.8)--(0.1,-0.8)--cycle;
\end{tikzpicture}
4
  • 1
    Hint if you make the code and press CTRL-k then the code is indented and the site will display it nicely in a verbatim manner. Please also note that we perfer that all code examples are full minimal examples not sniplets like this. Instead post a minimal docxument including document class and suitable (minimal) preamble. Then it is a lot easier to just copy and test your example.
    – daleif
    Jun 30, 2020 at 10:46
  • You can use arc[start angle=..., end angle=..., radius=...] instead of plotting a sine/cosine. The main difference is that arcs are done relative to the starting edge point rather than the center. The only tricky bit would be getting the thick black lines to match the curved edges, which could be done again by including arcs in the filll. Jun 30, 2020 at 13:50
  • This painting is a work of Mongolian calligraphy. It can draw using the languages and vectorgraph tikz. 1. An error occurred while issuing the increase and decrease command. 2. The edge of the line because of the differences I can not create a suitable map. 3. Please give me an easier opportunity !! Jul 1, 2020 at 6:42
  • The lack of i in Orginal (on your picture) is left unchanged for your own house keeping. Jul 2, 2020 at 7:48

3 Answers 3

9

With TikZ using intersections of circles and lines (68 intersections!):

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections,calc}
\begin{document}
\newcommand{\myInters}[4]{
\path[name intersections={of={#1 and #2},by={#3,#4}}];}
 \newcommand{\myArc}[2]{%
(i-#1) 
let
    \p1=(i-#1),
    \p2=(i-#2),
    \n{rad}={veclen(\x1,\y1)},
    \n{startAn}={atan2(\y1,\x1)},
    \n{endAn}={atan2(\y2,\x2)}
    in
    arc[start angle=\n{startAn},end angle=\n{endAn},radius=\n{rad}] -- }
%\myArc{start point}{end point}
\begin{tikzpicture}

\def\incr{1}%width of the lines

\def\startPos{\incr/2}

\def\myRad{3.1415}%radius of the most internal circle. Try 5 to get a figure like the original image

%circles
\foreach \incrRad [count=\k] in {1,2,...,10} {
\path[name path=c-\k]  (0,0) circle ({\myRad+\incrRad*\incr});
}

%vertical lines
\path[name path=v-1] (-\startPos,-\myRad-10.1*\incr) -- (-\startPos,\myRad+10.1*\incr);
\path[name path=v-2] (\startPos,-\myRad-10.1*\incr) -- (\startPos,\myRad+10.1*\incr);
\path[name path=v-3] (\startPos+\incr,-\myRad-10.1*\incr) -- (\startPos+\incr,\myRad+10.1*\incr);
\path[name path=v-4] (\startPos+2*\incr,-\myRad-10.1*\incr) -- 
                     (\startPos+2*\incr,\myRad+10.1*\incr);

%horizontal lines
\path[name path=o-1] (-\myRad-10.1*\incr,\startPos+\incr) -- (\myRad+10.1*\incr,\startPos+\incr);
\path[name path=o-2] (-\myRad-10.1*\incr,\startPos) -- (\myRad+10.1*\incr,\startPos);
\path[name path=o-3] (-\myRad-10.1*\incr,-\startPos) -- (\myRad+10.1*\incr,-\startPos);
\path[name path=o-4] (-\myRad-10.1*\incr,-\startPos-\incr) -- (\myRad+10.1*\incr,-\startPos-\incr);
%intersections of lines and circles
\def\IntersectionsList{%
c-3/v-3/i-1/i-42,c-3/o-2/i-2/i-17,c-6/o-2/i-3/null,c-6/v-4/i-4/i-39,c-7/v-4/i-5/i-38,
c-7/o-2/i-6/null,c-10/o-2/i-7/i-8,c-9/o-2/null/i-9,c-9/v-1/i-10/i-33,c-8/v-1/i-11/i-32,
c-8/o-2/null/i-12,c-2/v-1/i-19/i-24,c-5/o-2/null/i-13,c-5/v-1/i-14/i-29,c-2/v-1/i-19/i-24,
c-4/v-1/i-15/i-28,c-4/o-2/null/i-16,c-3/v-1/i-18/i-25,c-2/v-1/i-19/i-24,c-2/o-2/null/i-20,
c-1/o-2/null/i-21,c-1/o-3/i-22/null,c-2/o-3/i-23/null,c-3/o-3/i-26/i-41,c-4/o-3/i-27/null,
c-5/o-3/i-30/null,c-8/o-3/i-31/null,c-9/o-3/i-34/null,c-10/o-3/i-35/i-36,c-7/o-3/null/i-37,
c-6/o-3/null/i-40,c-4/v-3/i-60/i-43,c-4/o-4/null/i-44,c-5/o-4/null/i-45,c-5/v-3/i-57/i-46,
c-8/v-3/i-56/i-47,c-8/o-4/null/i-48,c-9/o-4/null/i-49,c-9/v-2/i-53/i-50,c-2/v-2/i-52/i-51,
c-9/o-1/i-54/null,c-8/o-1/i-55/null,c-5/o-1/i-58/null,c-4/o-1/i-59/null,c-6/v-1/i-61/i-66,
c-6/o-1/null/i-62,c-7/o-1/null/i-63,c-7/v-1/i-64/i-67,c-6/o-4/i-65/null,c-7/o-4/i-68/null}

\foreach \elA/\elB/\elC/\elD in \IntersectionsList {
\myInters{\elA}{\elB}{\elC}{\elD}
}

\fill[black,even odd rule] 
\myArc{1}{2} \myArc{3}{4} \myArc{5}{6} \myArc{7}{8} \myArc{9}{10} \myArc{11}{12} 
\myArc{13}{14} \myArc{15}{16} \myArc{17}{18} \myArc{19}{20} \myArc{21}{22} 
\myArc{23}{24} \myArc{25}{26} \myArc{27}{28} \myArc{29}{30} \myArc{31}{32} 
\myArc{33}{34} \myArc{35}{36} \myArc{37}{38} \myArc{39}{40} \myArc{41}{42} 
\myArc{43}{44} \myArc{45}{46} \myArc{47}{48} \myArc{49}{50} \myArc{51}{52} 
\myArc{53}{54} \myArc{55}{56} \myArc{57}{58} \myArc{59}{60} cycle 
\myArc{61}{62} \myArc{63}{64} cycle 
\myArc{65}{66} \myArc{67}{68} cycle;

\end{tikzpicture}
\end{document}

Mongolian calligraphy with TikZ

There aren't problems in scale this graphic:

graphics in various scales

2
  • This seems the best answer so far, picking up on several visually significant aspects that other answers have missed: the widths of all black lines are equal, and also the same width as the white space between them (important for the figure/ground duality); and all end-caps are aligned horizontally/vertically. But it would be good to add scaled versions, to show it avoids the issues there that OP mentioned in the question. Jul 2, 2020 at 9:49
  • 1
    @PeterLeFanuLumsdaine I've improve the answer with your request.
    – vi pa
    Jul 3, 2020 at 12:35
8

I propose a variant using pst-eucl (the colours are only for demo purposes):

\documentclass[12pt, border=6pt]{standalone}
\usepackage{pst-eucl, multido}

 \begin{document}

  \begin{pspicture}(-3,-3)(3,3)
\psset{PointName=none, PointSymbol=none}
\pstGeonode[PointSymbol=none, PointName=none](0,0){O}(0.3,3){A}(0.3,-3){B}(3, 0.15){C}(-3,0.15){D}(3, -0.15){E}(-3, -0.15){F}
\pnodes{N}(0,1.3)(0,1.6)(0,1.9)(0, 2.25)(0,1)
\pnodes{S}(0,-1.3)(0,-1.6)(0,-1.9)(0, -2.25)(0,-1)

\multido{\i= 0+ 1}{5}{%
\pstInterLC{A}{B}{O}{N\i}{E\i}{F\i}%
\pstInterLC{C}{D}{O}{N\i}{G\i}{H\i}%
\pstInterLC{E}{F}{O}{N\i}{K\i}{L\i}}%

\psset{linewidth=4.5pt, dimen=outer}%
\pstArcOAB{O}{L4}{H4}
\pscustom[linecolor=red]{\pstArcnOAB{O}{E0}{G0} \pstArcOAB{O}{G1}{E1} \pstArcnOAB{O}{E2}{G2} \pstArcOAB{O}{G3}{N3}}%
\pscustom{\pstArcnOAB{O}{H0}{N0}\pstArcOAB{O}{N1}{H1}\pstArcnOAB{O}{H2}{N2}\pstArcOAB{O}{N3}{H3}}
\pscustom[linecolor=blue]{\pstArcnOAB{O}{S0}{L0} \pstArcOAB{O}{L1}{S1} \pstArcnOAB{O}{S2}{L2}\pstArcOAB{O}{L3}{S3}}
\pscustom[linecolor=green]{\pstArcOAB{O}{F0}{K0} \pstArcnOAB{O}{K1}{F1} \pstArcOAB{O}{F2}{K2} \pstArcnOAB{O}{K3}{S3}
}%
\psset{linewidth=6pt, nodesepB=-2.25pt}
\pstLineAB{N4}{N3} \pstLineAB{S4}{S3}
 \end{pspicture}


\end{document} 

enter image description here

2
  • This loses one quite significant feature of the original: the widths of the black lines are equal to the widths of the white spaces between them, giving a nice figure/ground duality. Jul 2, 2020 at 9:52
  • @PeterLeFanuLumsdaine: 1) I don't see them as all equal. Only the outer white space is equal to lines widths. Furthermore, the vertical line are slightly thicker than the lines of the circle arcs. 2) It is not hard to adapt the coordinates (or the line widths) so that the generall look changes. It's one of the reasons why I used pstricks nodes.
    – Bernard
    Jul 2, 2020 at 10:01
6

Run with xelatex or latex->dvips->ps2pdf

\documentclass{standalone}
\usepackage{pstricks} 
\def\quartA{%
 \pscustom[linewidth=3mm,linejoin=1]{%
  \psarc(0,0){2}{184}{270}
  \psline(4;270)
  \psarc(0,0){4}{270}{356}
  \rlineto(-0.5,0)
  \psarcn(0,0){3.5}{355}{278}
  \rlineto(0,0.5)
  \psarc(0,0){3}{279.5}{354}
  \rlineto(-0.5,0)
  \psarcn(0,0){2.5}{352.5}{278}}}
\def\quartB{%
 \pscustom[linewidth=3mm,linejoin=1]{%
  \psarc(0,0){4}{272}{360}
  \rlineto(-0.5,0)
  \psarcn(0,0){3.5}{360}{274}
  \rlineto(0,0.5)
  \psarc(0,0){3}{275}{360}
  \rlineto(-0.5,0)
  \psarcn(0,0){2.5}{360}{274}}}

\begin{document}

\begin{pspicture}(-5,-5)(5,5)
\quartA
\rput{-90}(0,0){\quartB}
\rput{90}(0,0){\psscalebox{1 -1}{\quartB}}
\rput(0,0){\psscalebox{1 -1}{\quartA}}
\psarc[linewidth=3mm](0,0){2}{270}{90}
\end{pspicture}

\end{document}

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .