我有一个非常具体的问题需要解决:我想要制作一个形状,这个形状最容易被认为是一个圆形或从另一个更大的圆形中切出来的省略号:例如,想想苹果标志中的苹果(基本上是一个大圆形,右边切出了一些东西)。
我已经尝试使用该包执行以下片段pstricks
:
\begin{psclip}{\psellipse(1.8,0)(0.8,0.6)}
\pscircle(2.6,0){.45}
\end{psclip}
这将绘制一个省略号,并将圆的内部部分剪裁为省略号的形状。
是否可以使用 (或其他) 从另一个形状中减去或剪掉某个形状pstricks
?谢谢!
答案1
我认为这确实符合您的要求,使用pstricks
:
\pscustom[fillstyle=solid,fillcolor=yellow]{%
\psarc(0,0){2}{29}{-29}
\psarcn(2,0){1}{-105}{105}
}
这个\pscustom
命令非常强大,但需要小心。需要注意的一点是,当你将曲线粘合在一起时,你应该记住从上一条曲线结束的地方开始一条曲线。
我希望这有帮助。
问候
答案2
谢谢杰克的回答到 ”如何在 TikZ 中反转“剪辑”选择?“,这里有一种方法可以解决你使用 TikZ 所问的问题(我认为)(因为你说“或其他”)。
首先,结果:
我不确定你是想填充它们还是只绘制它们。
现在,代码:
\documentclass{article}
\thispagestyle{empty}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[remember picture,overlay]
% A path that follows the edges of the current page
\tikzstyle{reverseclip}=[insert path={(current page.north east) --
(current page.south east) --
(current page.south west) --
(current page.north west) --
(current page.north east)}
]
\begin{scope}
\begin{pgfinterruptboundingbox}
\path [clip] (1.5,0) circle (1) [reverseclip];
\end{pgfinterruptboundingbox}
\draw[thick] (0,0) ellipse (2 and 1);
\end{scope}
\begin{scope}
\path[clip] (0,0) ellipse (2 and 1);
\draw[thick] (1.5,0) circle (1);
\end{scope}
\begin{scope}
\begin{pgfinterruptboundingbox}
\path [clip] (1.5,-3) circle (1) [reverseclip];
\end{pgfinterruptboundingbox}
\draw[red,fill=blue,ultra thick] (0,-3) ellipse (2 and 1);
\end{scope}
\begin{scope}
\path[clip] (0,-3) ellipse (2 and 1);
\draw[red,ultra thick] (1.5,-3) circle (1);
\end{scope}
\end{tikzpicture}
\end{document}
最后,解释一下。Jake 的回答(链接在上面)提供了一种“反向裁剪”的方法,即在整个页面上绘图,然后在中间打出所需的形状。我们用这种方法将椭圆形裁剪到圆形上。这样就产生了截断的椭圆形(填充或未填充),但我们需要做更多的事情来完成形状。为此,我们使用与裁剪出的圆形相同大小的圆形,并将其裁剪到椭圆形上。可以轻松地将所有这些操作变成一个命令。
这样做的主要缺点是形状不是单条路径。这会产生影响的地方在于连接处:如果你仔细观察,你会发现圆和椭圆相交的角并不完美。这与剪切和描边的工作方式有关。剪切路径非常细,但描边路径却不是,因此剪切路径然后描边原始路径并不完全正确。为了使其完美,必须使用淡入淡出,或修改剪切路径,使它们(实际上)是外部描边路径。杰克的解决方案很容易适应淡入淡出。
答案3
这可能是一个略显简单的答案,但我认为你可以在 Tikz 中通过“覆盖白色”来做到这一点:
\begin{tikzpicture}
\path[fill=green,draw=none] (0,0) circle(3cm);
\path[fill=white,draw=none] (2,0) circle(2cm);
\end{tikzpicture}
答案4
一个使用 tikz 的解决方案,有两个圆,但如果第一条路径是椭圆,我会遇到问题。我不知道为什么,但交叉点没问题,但最后一个圆弧是错误的,是椭圆
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\thispagestyle{empty}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,-3);
\coordinate (B) at (1.5,-3);
\path[name path=circleA] (A) circle (2);
\path[name path=circleB] (B) circle (1);
\path [ name intersections={of=circleA and circleB}]
(intersection-1) coordinate (E)
(intersection-2) coordinate (F) ;
\pgfmathanglebetweenpoints{\pgfpointanchor{B}{center}}{%
\pgfpointanchor{E}{center}}
\global\let\FirstAngleB\pgfmathresult
\pgfmathanglebetweenpoints{\pgfpointanchor{B}{center}}{%
\pgfpointanchor{F}{center}}
\global\let\SecondAngleB\pgfmathresult
\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{%
\pgfpointanchor{E}{center}}
\global\let\FirstAngleA\pgfmathresult
\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{%
\pgfpointanchor{F}{center}}
\global\let\SecondAngleA\pgfmathresult
\draw[color=red,fill=blue,ultra thick] (E) arc (\FirstAngleB:\SecondAngleB: 1cm) arc (\SecondAngleA:\FirstAngleA: 2cm) ;
\end{tikzpicture}
\end{document}
使用椭圆我尝试这样做:
\path[name path=circleA] (A) ellipse (2cm and 1cm);
\draw[color=red,fill=blue,ultra thick] (E) arc (\FirstAngleB:\SecondAngleB: 1cm) arc (\SecondAngleA:\FirstAngleA: 2cm and 1cm) ;
也许我犯了一个错误,但最后一点是错误的。也许是角度的问题。圆的两个点是正确的,交叉点也很好,但是……