这个问题导致了一个新的方案的出现:
pst-intersect
根据我的经验,PSTricks 中没有宏可以获取两条曲线的交点。在 PSTricks 中可以做到这一点吗?或者我在做一件不可能的事情?
\documentclass[pstricks,border=12pt]{standalone}
\begin{document}
\begin{pspicture}[showgrid](4,3)
\pscurve[linecolor=red](0,3)(1,1)(2,3)(3,2)(4,0)
\pscurve[linecolor=blue](0,0)(1,3)(2,1)(3,1)(4,3)
\end{pspicture}
\end{document}
答案1
我刚刚发布了一个新的 PSTricks 包pst-intersect
,可以计算几乎任意路径的交点。
关于曲线,您可以按如下方式计算交点:
\documentclass{article}
\usepackage{multido, pst-intersect}
\thispagestyle{empty}
\begin{document}
\begin{pspicture}[showgrid](4,3)
\pssavepath[linecolor=red]{A}{\pscurve(0,3)(1,1)(2,3)(3,2)(4,0)}
\pssavepath[linecolor=blue]{B}{\pscurve(0,0)(1,3)(2,1)(3,1)(4,3)}
\psintersect[showpoints, name=C]{A}{B}
\pstracecurve[linewidth=2\pslinewidth, istart=2, istop=3]{C}{A}
\multido{\i=1+1}{3}{\uput[0](C\i){\i}}
\end{pspicture}
\end{document}
结果
这还显示了一些其他包功能:使用交叉节点,并重新追踪已保存路径的部分。
为了获取交叉点的坐标,您可以使用pst-nodes
的参数saveNodeCoors
或包宏(这两个选项自 0.3 版起可用)。然后可以使用包的\psGetIsectCenter
显示值:\psPrintValue
pst-tools
\documentclass{article}
\usepackage{multido, pst-intersect, pst-tools}
\thispagestyle{empty}
\begin{document}
\begin{pspicture}[showgrid](4,3)
\pssavepath[linecolor=red]{A}{\pscurve(0,3)(1,1)(2,3)(3,2)(4,0)}
\pssavepath[linecolor=blue]{B}{\pscurve(0,0)(1,3)(2,1)(3,1)(4,3)}
\psintersect[showpoints, name=C, saveNodeCoors]{A}{B}
\pstracecurve[linewidth=2\pslinewidth, istart=2, istop=3]{C}{A}
\multido{\i=1+1}{3}{\uput[0](C\i){\i}}
\end{pspicture}
\bigskip
\makebox[4em]{X} \makebox[4em]{Y}\\
\multido{\i=1+1}{3}{%
\makebox[4em]{\psPrintValue{N-C\i.x}}
\makebox[4em]{\psPrintValue{N-C\i.y}}\\
}%
\makebox[4em]{X} \makebox[4em]{Y}\\
\multido{\i=1+1}{3}{%
\makebox[4em]{\psPrintValue{\psGetIsectCenter{C}{}{\i} I-C\i.x}}
\makebox[4em]{\psPrintValue{\psGetIsectCenter{C}{}{\i} I-C\i.y}}\\
}%
\end{document}
答案2
以下是使用 TikZ 库实现此操作的方法intersections
:
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\draw [red, smooth, name path=first] plot coordinates {(0,3)(1,1)(2,3)(3,2)(4,0)};
\draw [blue, smooth, name path=second] plot coordinates {(0,0)(1,3)(2,1)(3,1)(4,3)};
\draw [thick, name intersections={of=first and second, total=\n}]
\foreach \i in {1,...,\n}{
(intersection-\i) circle [radius=3pt]
};
\end{tikzpicture}
\end{document}