我正在尝试绘制一个正方形,并在圆盘后面画出四面八方的线条。就像一幅朝阳图。一定有更好的程序来编码,而不是用 while 计算圆的坐标,在循环\usetikzlibrary{calc}
中使用该坐标\foreach
作为路径终点坐标,然后裁剪...
这是我自己的建设性程序。循环不是计算或剪切,而是围绕正方形命名外部节点进行操作。然后另一个循环绘制一条从偏离中心点到每个名称的路径。因此不需要剪切。
\documentclass[tikz,border=16mm]{standalone}
\def\nodings(#1){%
\foreach \x in {1,...,#1} {\foreach \y in {1,#1} {\node (noding\x-\y) at (\x,\y) {x};}}%
\foreach \y in {1,...,#1} {\foreach \x in {1,#1} {\node (noding\x-\y) at (\x,\y) {x};}}%
}
\def\outrays(#1,#2){%
\foreach \x in {1,...,#1} {\foreach \y in {1,#1} {\draw[line width=1pt,rounded corners=48pt,line cap=round,bend left=24](#2,#2) to (noding\x-\y);}}%
\foreach \y in {1,...,#1} {\foreach \x in {1,#1} {\draw[line width=1pt,rounded corners=48pt,line cap=round,bend left=24](#2,#2) to (noding\x-\y);}}%
}
\begin{document}\begin{tikzpicture}
\nodings(36)\outrays(36,24)
\node[circle,fill=white,text=cyan!50!black,text width=192mm] (mydisc) at (24,24) {\fontsize{128}{1}\selectfont NAME\\TITLE};
\end{tikzpicture}\end{document}
编辑:最终有五种程序来构建这张图片。
答案1
要连接圆的边缘,您可以使用节点的边框锚点(A.120)
和 to
运算符将其连接到外部正方形。
\documentclass[tikz, border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[clip] (-2,-2) rectangle +(3,3);
\node[minimum size=5cm](A){};
\node[circle, draw, minimum size=1cm](B) at (A.center) {};
\foreach \angle in {0,5,...,360} \draw (B.\angle) to (A);
\end{tikzpicture}
\end{document}
问题是,如果圆B
不在正方形的中心,A
就会发生一些奇怪的事情,我不知道为什么,但可能有原因。这就是为什么那里有\draw[clip]
。
答案2
您不需要连接节点。
首先画出背景线。一切从 开始(0,0)
。
\foreach \angle in {0,1,...,359} \draw[cyan!50!black] (0,0)--++(\angle:4);
第二,画一个node
白色填充的圆形:
\node[circle, fill=white, text=cyan!50!black, text width=15mm, align=center]{Orion\\2000};
第三(尽管这是第一个命令),定义剪辑区域:
\documentclass[tikz, border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\path[clip] (-2.5,-3) rectangle (1.3,1.5);
\foreach \angle in {0,1,...,359} \draw[cyan!50!black] (0,0)--++(\angle:4);
\node[circle, fill=white, text=cyan!50!black, text width=15mm, align=center]{Orion\\2000};
\end{tikzpicture}
\end{document}
更新:
由于 OP 似乎不想使用 a,clip
而是想在外部矩形上定义显式点,因此这里有另一个解决方案。它基于链接的,但named
它使用的不是节点,而是calc
库:
\documentclass[tikz,border=16mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node[minimum size=36cm, anchor=south west] (A) {};
\foreach \j [remember=\j as \lastj (initially north west)] in {north east, south east, south west, north west}{
\foreach \i in {0,1,...,36}
\draw[line width=1pt, bend left=24, draw=cyan!50!black] (24,24) to ($(A.\lastj)!\i/36!(A.\j)$);
}
\node[circle,fill=white,text=cyan!50!black,text width=192mm, align=center] (mydisc) at (24,24) {\fontsize{128}{1}\selectfont NAME\\TITLE};
\end{tikzpicture}
\end{document}
答案3
静态版本
\documentclass[preview,pstricks,margin=5mm]{standalone}
\usepackage{pst-node}
\begin{document}
\begin{pspicture}(-5,-5)(5,5)
\psclip{\psframe[linestyle=none,linewidth=0](-5,-5)(5,5)}
\pnode(1,1){A}\pscircle(A){2}
\foreach \i in {0,10,...,350}{\pnode[A](2;\i){B}\psline(B)([nodesep=10]{B}A)}
\endpsclip
\end{pspicture}
\end{document}
动画版
\documentclass[preview,pstricks,margin=5mm]{standalone}
\usepackage{pst-node}
\def\pict(#1){\begin{pspicture}(-5,-5)(5,5)
\psclip{\psframe[linestyle=none,linewidth=0](-5,-5)(5,5)}
\pnode(#1){A}\pscircle(A){2}
\foreach \i in {0,10,...,350}{\pnode[A](2;\i){B}\psline(B)([nodesep=10]{B}A)}
\endpsclip
\end{pspicture}}
\begin{document}
\foreach \j in {0,20,...,340}{\pict(1;\j)}
\end{document}
答案4
如果您想避免剪辑(虽然我不确定您为什么要这样做)您可以改用交叉点:
\documentclass[tikz, border=1mm]{standalone}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\path[name path=rect] (-2,-2) rectangle +(3,3);
\node[circle, minimum size=1cm] (A) at (0,0) {};
\foreach \angle in {0,3,...,359}{
\begin{pgfinterruptboundingbox}
\path[name path global=ray] (A.\angle) to ++ (\angle:10);
\end{pgfinterruptboundingbox}
\draw[name intersections={of=rect and ray}] (A.\angle) to (intersection-1);
}
\end{tikzpicture}
\end{document}