如何计算tikz中线段和椭圆定义的线的交点

如何计算tikz中线段和椭圆定义的线的交点

编辑这是我想要问的,但最初没有清楚地表述。 Tikz 包intersections允许人们计算和操作由(不相交)线段定义的两个非平行线的交点。 我原始问题中的链接显示了如何执行此操作,即如何(F)定义点。 在下面的示例中,点(0)被定义为延长线段vertline和的线的交点horline。 我想要做的是计算和操作椭圆与延长给定线段的线的交点,而不必依赖于“手动”延长线段,以确保它实际上与椭圆相交。 当我从链接复制代码中使用的语法并天真地对其进行调整时,

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\usetikzlibrary{intersections}
\path[name path=ellipse] (0,0) ellipse (4 and 3);
\path[name path=horline] (1,0) -- (2,0);
\path[name path=vertline] (0,1) -- (0,2);
\path[name intersections={of = horline and vertline, by={origin}}, draw]
(origin) node [above right] {$0$} circle (1.5pt);
\path[name intersections={of = ellipse and vertline}]
\coordinate (I) at (intersection-1);
\coordinate (J) at (intersection-2);
\draw (I) circle (1.5pt);
\draw (J) circle (1.5pt);
\end{tikzpicture}
\end{document}

它没有给出我想要的结果:(I)(J)的交点ellipsevertline完全错位了。此外,代码有缺陷,但我不明白错误在哪里。请告诉我您是否会以不同的方式编写代码,我不想养成坏习惯。

进一步编辑它似乎(I)(J)没有放错地方,它们只是根本没有计算过,而 pdf 上出现的是点(I),是(J)在之前的绘图中定义的。

原始问题 - 可能会被丢弃在此例子其中,作者使用 tikz 计算椭圆与某条线段定义的线的两个交点(X 和 Y)的坐标,以及两条线段定义的两条线的交点(F)的坐标。

在我的计算机上,第二个问题我没有遇到任何问题,即找到由(不相交的线段)定义的两条线的交点,但是当我尝试对椭圆与不与椭圆相交的线段定义的线进行相交时,却没有任何意义。

答案1

您可以使用坐标规范 计算两条非平行线的交点(intersection of A--B and C--D),其中AB和必须是命名节点。这就是您链接的代码中使用的方法。但是,这不适用于任意命名的路径,CD这正是您要尝试做的。

要计算直线与任意路径的交点,您必须确保路径确实相交。如果您不想手动延伸线段,可以使用以下方法TikZ 中与射线的交点并在环境内创建“无限长”(比如说 1 米)的线段interruptboundingbox

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\usetikzlibrary{intersections, calc}

\path[name path=ellipse] (0,0) ellipse (4 and 3);
\begin{pgfinterruptboundingbox}
\path[name path global=horline] ($(1,0)!-100cm!(2,0)$) -- ($(1,0)!100cm!(2,0)$);
\path[name path global=vertline] ($(0,1)!-100cm!(0,2)$) -- ($(0,1)!100cm!(0,2)$);
\end{pgfinterruptboundingbox}
\path[name intersections={of = horline and vertline, by={origin}}, draw]
(origin) node [above right] {$0$} circle (1.5pt);
\path[name intersections={of = ellipse and vertline}];
\coordinate (I) at (intersection-1);
\coordinate (J) at (intersection-2);
\draw (I) circle (1.5pt);
\draw (J) circle (1.5pt);
\end{tikzpicture}
\end{document}

相关内容