一种绘制发光星座的有效方法

一种绘制发光星座的有效方法

作为提出的问题的应用如何给星星添加发光效果

考虑一下代码

\documentclass{book}
\textheight 8.5in \textwidth 5.75in 

\usepackage{tikz}
\usetikzlibrary{fadings, calc}
\tikzfading[name=dim fade, inner color=transparent!50, outer color=transparent!100]
\tikzfading[name=bright fade, right color=transparent!100, left color=transparent!100, middle color=transparent!0]

\newcommand{\glowstar}[2][.5]{\fill[white,path fading=dim fade](#2)circle[radius=#1*.4];
    \foreach \t in {0,60,120}{
    \fill[rotate around={\t:(#2)}, white,path fading=bright fade]($(#2)-(.9*#1,0)$)--($(#2)-(0,.02*#1)$)--($(#2)+(.9*#1,0)$)--($(#2)+(0,.02*#1)$)--cycle;
    \fill[rotate around={\t:(#2)}, white,path fading=bright fade]($(#2)-(.3*#1,0)$)--($(#2)-(0,.04*#1)$)--($(#2)+(.3*#1,0)$)--($(#2)+(0,.04*#1)$)--cycle;}
    \fill[white] (#2)circle[radius=#1*.075];
    }

\begin{document}
\begin{center}
\begin{tikzpicture}
\fill[blue!25!black] rectangle (16,12);
\glowstar[0.8]{8,10}
\glowstar[0.8]{4,6}
\glowstar[0.8]{12,6}
\end{tikzpicture}
\end{center}
\end{document}

产生

在此处输入图片描述

显示的三颗星与笛卡尔点 (8,6) 的距离均相等(4 个单位)。在这种情况下,我想以逆时针方向每隔 15 度绘制一个发光星半圆(可能大小各异),从笛卡尔点 (12,6) 开始,到笛卡尔点 (4,6) 结束。

此外,我希望避免计算这些点的笛卡尔坐标,然后绘制它们,就像我对(更容易计算的)三个显示的星星所做的那样。

在我看来,极坐标系下的东西会更简单、更轻松;例如 ---

问题:我如何才能首先固定一个点,比如 MWE 中的笛卡尔点 (8,6),然后绘制点 (4,0)、(4,15)、(4,30)、(4,45)、...、(4,150)、(4,165)、(4, 180),这些极点的纵坐标以度为单位?这可能吗?还有更好的方法吗?

我正在寻找一种通用方法,通过该方法我可以固定一个点,然后根据一种不依赖于指定相关的笛卡尔坐标的方法绘制一组星星。

谢谢。

答案1

我对宏做了一点小改动,要求参数用括号\glowstar[0.8]{(8,10)}代替\glowstar[0.8]{8,10}。这可能更好,因为它允许你使用极坐标,例如,\glowstar[0.8]{(60:5)}

然后,您可以使用foreach循环和语法($(8,6)+(\k:2)$)来绘制星星。calc此“添加坐标”语法所需的包已加载。混合使用直角坐标和极坐标是可以的。

在此处输入图片描述

\documentclass{book}
\textheight 8.5in \textwidth 5.75in 

\usepackage{tikz}
\usetikzlibrary{fadings, calc}
\tikzfading[name=dim fade, inner color=transparent!50, outer color=transparent!100]
\tikzfading[name=bright fade, right color=transparent!100, left color=transparent!100, middle color=transparent!0]

\newcommand{\glowstar}[2][.5]{\fill[white,path fading=dim fade]#2circle[radius=#1*.4];
    \foreach \t in {0,60,120}{
    \fill[rotate around={\t:#2}, white,path fading=bright fade]($#2-(.9*#1,0)$)--($#2-(0,.02*#1)$)--($#2+(.9*#1,0)$)--($#2+(0,.02*#1)$)--cycle;
    \fill[rotate around={\t:#2}, white,path fading=bright fade]($#2-(.3*#1,0)$)--($#2-(0,.04*#1)$)--($#2+(.3*#1,0)$)--($#2+(0,.04*#1)$)--cycle;}
    \fill[white] #2circle[radius=#1*.075];
    }

\begin{document}

\begin{center}
\begin{tikzpicture}
\fill[blue!25!black] rectangle (16,12);
\foreach \k in {0,15,...,180}{
  \glowstar[0.8]{($(8,6)+(\k:2)$)}}
\end{tikzpicture}
\end{center}

\end{document}

相关内容