![Tikz:可能使用 calc 包来缩放坐标](https://linux22.com/image/274424/Tikz%EF%BC%9A%E5%8F%AF%E8%83%BD%E4%BD%BF%E7%94%A8%20calc%20%E5%8C%85%E6%9D%A5%E7%BC%A9%E6%94%BE%E5%9D%90%E6%A0%87.png)
我画了一个这样的矩形:
\draw[color=orange, fill=orange, opacity=0.1] (Q3term1) rectangle (Q3term2);
本质上我想要做的是将矩形水平拉伸 10%,垂直拉伸 5%,因此类似于:
\draw[color=orange, fill=orange, opacity=0.1] ($(1.1,1.05)*(Q3term1)$) rectangle ($(0.9,0.95)*(Q3term1)$);
如果有一种方法可以在不使用 calc 库的情况下做到这一点,那就更好了。
谢谢。
答案1
如果您不需要相对指定矩形的角,则可以rectangle
为此使用节点。
该\pgfpointlineattime{<factor>}{<p1>}{<p2>}
宏是低级 PGF 版本,($(<p1>)!<factor>!(<p2>)$)
也用于沿直线放置节点的选项pos=<factor>
。
如果要添加特定的填充长度,可以使用fit
带有inner xsep
和的库inner ysep
。
该backgrounds
库仅用于为图片添加简单的网格。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{calc,backgrounds,fit}
\makeatletter
\tikzset{
from/.code args={#1 to #2}{%
\pgfextract@process\tikz@fromto@first{\tikz@scan@one@point\pgfutil@firstofone#1\relax}%
\pgfextract@process\tikz@fromto@second{\tikz@scan@one@point\pgfutil@firstofone#2\relax}%
% The next line sets "at".
\pgfextract@process\tikz@node@at
{\pgfpointlineattime{.5}{\tikz@fromto@first}{\tikz@fromto@second}}%
\pgfpointdiff{\tikz@fromto@first}{\tikz@fromto@second}%
\tikzset{
shape=rectangle,
anchor=center,
inner sep=+0pt,
outer sep=+0pt,
minimum width/.expanded={abs(\the\pgf@x)},
minimum height/.expanded={abs(\the\pgf@y)}}%
}
}
\makeatother
\begin{document}
\begin{tikzpicture}[gridded,nodes={orange, draw, fill, fill opacity=.5}]
\path (1,1) coordinate (a)
(3,4) coordinate (b)
(4,1) coordinate (a')
(6,4) coordinate (b');
\node[from=(a) to (b), xscale=1.1, yscale=1.05] {};
\node[fit=(a')(b'), inner xsep=.1cm, inner ysep=.07cm] {};
\end{tikzpicture}
\end{document}