从如何画一条过一个点并垂直于另一个点的线?我学会了使用shorten
来延长线。但延长的部分似乎并不“真正存在”。例如,我想连接两个预定义的点并将线段延长 1cm,然后将新的端点定义为“C”以供以后使用。但\draw[shorten >=-1cm] (A) -- (B) coordinate (C)
只会给我一个 C,而实际上它仍然是 B。
我真正需要做的是找到两条延长线的交点,但我认为困难的部分是让延长线“真实”。
答案1
您说得对,该shorten >
语法实际上并没有“延伸”线条,而是在较低级别上起作用。对于您的情况,我会使用\usetikzlibrary{calc}
,它可以让您访问许多巧妙的坐标计算。
您可以使用以下语法实现所需的结果
\draw (A) -- ($(B)!-1cm!(A)$) coordinate (C);
其中($...$)
括起语法calc
,并且指定位于 从到 的线上(<first node>)!<distance>!(<second node>)
的坐标。<distance>
<first node>
<second node>
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}
\fill (0,0) circle [radius=2pt] node (A) [label=A] {};
\fill (2,1) circle [radius=2pt] node (B) [label=B] {};
\fill (3.2,1) circle [radius=2pt] node (C) [label=C] {};
\fill (4,0.5) circle [radius=2pt] node (D) [label=D] {};
\draw [name path=AB] (A) -- ($(B)!-1cm!(A)$);
\draw [name path=CD] (D) -- ($(C)!-1cm!(D)$);
\fill [red,name intersections={of={AB and CD}}] (intersection-1) circle [radius=2pt];
\end{tikzpicture}
\end{document}
答案2
如果您使用tkz-euclide
(尽管文档只有法语),这会容易得多:
\documentclass{article}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(0,0){A} \tkzDefPoint(2,1){B}
\tkzDefPoint(3.2,1){C} \tkzDefPoint(4,0.5){D}
\tkzInterLL(A,B)(C,D) \tkzGetPoint{I}
\tkzDrawLines(A,I D,I)
\tkzDrawPoints[color=blue](A,B,C,D) \tkzDrawPoint[color=red](I)
\tkzLabelPoints[above](I,A,B,C,D)
\end{tikzpicture}
\end{document}
您还可以编写一段代码来检查坐标并自动化\tkzDrawLines
命令的选择点,然后使用任意坐标(如果需要),但我太懒了,不想这样做。:)
答案3
将此视为原始问题的补充答案,因为解决方案是使用pstricks
。
pstricks-add
通过宏提供此交点
\psIntersectionPoint(<P0>)(<P1>)(<P2>)(<P3>){<node name>}
,其中P0
和P1
定义一条直线(例如0-1
),和P2
定义P3
另一条直线(例如2-3
)。是和<node name>
的交点处保存的节点的名称。以下示例直接取自0-1
2-3
pstricks-add
包装文档:
\documentclass{article}
\usepackage{pstricks-add}% http://ctan.org/pkg/pstricks-add}
\begin{document}
\psset{unit=0.5cm}
\begin{pspicture}(-5,-4)(5,5)
\psaxes[labelFontSize=\scriptstyle,
dx=2,Dx=2,dy=2,Dy=2]{->}(0,0)(-5,-4)(5,5)
\psline[linecolor=red,linewidth=2pt](-5,-1)(5,5)
\psline[linecolor=blue,linewidth=2pt](-5,3)(5,-4)
\qdisk(-5,-1){2pt}\uput[-90](-5,-1){A}
\qdisk(5,5){2pt}\uput[-90](5,5){B}
\qdisk(-5,3){2pt}\uput[-90](-5,3){C}
\qdisk(5,-4){2pt}\uput[-90](5,-4){D}
\psIntersectionPoint(-5,-1)(5,5)(-5,3)(5,-4){IP}
\qdisk(IP){3pt}\uput{0.3}[90](IP){IP}
\psline[linestyle=dashed](IP|0,0)(IP)(0,0|IP)
\end{pspicture}
\end{document}