测量

测量

我有这个代码:

\documentclass{standalone}
\usepackage[html]{xcolor}
\usepackage{tikz}


\definecolor{verda}{HTML}{009900}
\definecolor{blanka}{HTML}{FFFFFF}

\begin{document}
\begin{tikzpicture}
\fill[verda] (0,0) rectangle (20,13);
\fill[blanka] (0,13) rectangle (6.6,6.6);
\end{tikzpicture}
\end{document}

该标志应如下所示:

世界语旗帜。

问题:绿色星星。问候!

答案1

结果

测量

  • 英文维基百科条目说:

    旗帜的宽度与旗帜的高度与白色正方形的边长之比应为 3 比 2 比 1。白色正方形的边长与星星所在圆的半径之比应为 10 比 3.5。

    如果旗帜的宽度为 3 个单位,则外接圆的直径为 0.7 个单位。

使用以下测量值进行绘图图像:Esperanta Flago Proporcioj.PNG

图像:Esperanta Flago Proporcioj.PNG

颜色

德语维基百科文章关于颜色:

绿松石的 CMYK 颜色值为 79%、22%、99%、5%(代表 PANTONE 363 C)。

然后可以按以下方式定义颜色:

\definecolor{EsperantoGreen}{cmyk}{.79,.22,.99,.05}

但是,那世界语维基百科文章列出了很多颜色,可以用 HTML 颜色模型定义:

\documentclass{standalone}
\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{xcolor}
\def\x#1{%
  \color[HTML]{#1}\rule{1.5em}{1em} & \ttfamily #1\\%
}
\begin{document}
\begin{tabular}{rl}
\toprule
Sample & Color (HTML) \\
\midrule
\x{009900}
\x{007D13}
\x{37A93A}
\x{2C693F}
\x{CCE82E}
\x{008000}
\x{1B9332}
\x{158A44}
\x{009F6B}
\midrule
\color[cmyk]{.72,.22,.99,.05}\rule{1.5em}{1em} &
CMYK(%
  \SIlist[list-units=repeat, list-final-separator={,}]
  {72;22;99;05}{\percent})\\
\bottomrule
\end{tabular}
\end{document}

颜色

星星

绘制星星的方法有多种:

  • 星形的外部点可用作五边形正多边形的角点。然后填充路径将角与下一个角连接起来,例如:

    \fill[EsperantoGreen]
      (.5cm, 1.5cm) node[
        regular polygon,
        regular polygon sides=5,% default
        inner sep=0pt,
        minimum size=0.7cm,   
      ] (star) {}    
      (star.corner 1)
      \foreach \i in {1, 3, 5, 2, 4} {
        -- (star.corner \i)
      } -- cycle
    ;
    
  • 如果配置正确,节点形状star已经具有正确的形状。选项minimum size指定外圆的直径,为 0.7 个单位。内圆的直径也很重要,因为它会影响侧面的斜率。内半径可以通过两个选项间接指定:

    • star point height:外半径和内半径之间的差异或
    • star point ratio:外半径与内半径之比。查看一些三角形、计算角度并进行一些三角学计算后,得出的比率是 sin(126)/sin(18) = (3 - sqrt(5))/2。

      \path
        (.5, 1.5) node[
          fill=EsperantoGreen,
          star,
          star point ratio=sin(126)/sin(18),
          minimum size=0.7cm
        ] {};
      
  • 可以在极坐标系中轻松指定角。

通过节点实现的标志

可以通过设置单位寄存器来缩放标志\EsperantoUnit

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\definecolor{EsperantoGreen}{HTML}{009900}
\newdimen\EsperantoUnit
\setlength{\EsperantoUnit}{40mm}

\begin{document}
\tikz\path[
  inner sep=0pt,
  every node/.append style={node contents={}},
  x=\EsperantoUnit,
  y=\EsperantoUnit,
]
  (1.5, 1) node[
    fill=EsperantoGreen,
    rectangle,
    minimum width=3\EsperantoUnit,
    minimum height=2\EsperantoUnit,
  ]
  (.5, 1.5) node[
    fill=white,
    rectangle,
    minimum width=\EsperantoUnit,
    minimum height=\EsperantoUnit,
  ]
  node[
    fill=EsperantoGreen,
    star,
    star point ratio=sin(126)/sin(18),
    minimum size=0.7\EsperantoUnit,
  ]
;
\end{document}

带星号的旗帜,通过极坐标填充

这里,可以通过选项缩放标志scale

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds}

\definecolor{EsperantoGreen}{HTML}{009900}

\begin{document}
\tikz[
  background rectangle={fill=white},
  fill=EsperantoGreen,
  scale=4,
]\fill
  (0, 0) -- (3, 0) -- (3, 2) -- (1, 2) -- (1, 1) -- (0, 1) -- cycle
  (.5, 1.5)
  +(0, .35) \foreach \i in {1, ..., 4} { -- +(90+\i*144:.35)} -- cycle
;
\end{document}

通过 SVG 文件标记

维基百科公共资源有世界语旗帜作为SVG 文件

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="400">
<path fill="#FFF" d="m0,0h202v202H0"/>
<path fill="#090" d="m0,200H200V0H600V400H0m58-243 41-126 41,126-107-78h133"/>
</svg>

这可以直接映射到 TikZ,因为 TikZ 的库svg.path支持 SVG 路径规范:

\documentclass[tikz]{standalone}
\usetikzlibrary{svg.path}

\definecolor{EsperantoGreen}{HTML}{009900}

\begin{document}
\begin{tikzpicture}[
  yscale=-1,
  svg scale/.style={scale=.2mm},
]
  \fill[white]
    svg[svg scale] {m0,0h202v202H0};
  \fill[EsperantoGreen]
    svg[svg scale] {m0,200H200V0H600V400H0m58-243 41-126 41,126-107-78h133};
\end{tikzpicture}
\end{document}

答案2

这相当接近。使用 进行缩放scale可以工作,但更改xy单位向量将不起作用,因为星形的大小以厘米为单位定义。

根据https://en.wikipedia.org/wiki/Esperanto_symbols星星半径与白色正方形边长之比应为 3.5/10。minimum size我将其按 7/10 缩放以定义直径。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage[html]{xcolor}
\usepackage{tikz}
\usetikzlibrary{shapes}

\definecolor{verda}{HTML}{009900}
\definecolor{blanka}{HTML}{FFFFFF}

\begin{document}
\begin{tikzpicture}
\fill[verda] (0,0) rectangle (20,13);
\fill[blanka] (0,13) rectangle (6.6,6.6);
\node at (3.3,9.7) [transform shape,star,star point height=1.53cm,fill=verda,minimum size=6.6cm*7.5/10] {};
\end{tikzpicture}
\end{document}

答案3

以下是l3draw基于@Heiko Oberdiek 提供的构造表的标志的实现:

\documentclass[border=10pt]{standalone}
\usepackage{l3draw}
\begin{document}
\ExplSyntaxOn
\draw_begin:

    \color_fill:n { white }
    \draw_path_rectangle_corners:nn { 0cm , 10cm } { 10cm , 20cm }
    \draw_path_use_clear:n { fill }

    \color_fill:nn { cmyk } { .79 , .22 , .99 , .05 }
    \draw_path_moveto:n { 0cm , 10cm }
    \draw_path_lineto:n { 10cm , 10cm }
    \draw_path_lineto:n { 10cm , 20cm }
    \draw_path_lineto:n { 30cm , 20cm }
    \draw_path_lineto:n { 30cm , 0cm }
    \draw_path_lineto:n { 0cm , 0cm }
    \draw_path_close:
    \draw_path_use_clear:n { fill }
    
    \draw_scope_begin:
        \draw_transform_shift:n { 5cm , 15cm }
        \draw_path_moveto:n { \draw_point_polar:nn { 3.5cm } { 90 } }
        \int_step_inline:nnnn { 72 } { 72 } { 360 } {
            \draw_path_lineto:n 
                { \draw_point_polar:nn { 2 / ( 3 + sqrt(5) ) * 3.5cm } { 90 + #1 - 36 } }
            \int_compare:nNnF { #1 } = { 360 } {
                \draw_path_lineto:n { \draw_point_polar:nn { 3.5cm } { 90 + #1 } }
            }
        }
        \draw_path_close:
        \draw_path_use_clear:n { fill }
    \draw_scope_end:
    
    \color_stroke:n { black }
    \draw_path_rectangle_corners:nn { 0cm , 0cm } { 30cm , 20cm }
    \draw_path_use_clear:n { stroke }

\draw_end:
\ExplSyntaxOff
\end{document}

在此处输入图片描述

相关内容