我不知道如何将倾斜的矩形中心连接到我的原点(矩形的左角)。请帮帮我
\begin{figure}[!h]
\centering
\begin{tikzpicture}
\draw[black,thick] (0,0) -- (5,0);
\draw[black,thick] (0,0) -- (0,3);
\draw[black,thick] (0,3) -- (5,0);
% Adding the angle
\draw (3.5,0) arc (180:135:1) node[midway,anchor=east,black] {$\theta$};
\draw[rotate around={-30.96:(1.5,2.1)}] (1.5,2.1) rectangle (3,3);
\draw[rotate around={-30.96:(1.5,2.1)},black,->,thick] (2.25,2.55) -- (2.25,3.55)node[black,anchor=west] {$\vec{N}$};
\draw[rotate around={-30.96:(1.5,2.1)}, black, ->, thick]
(2.25,2.55) -- ({2.25 + sin(30.96)}, {2.55 - cos(30.96}) node[black,anchor= west] {$\vec{P}$};
\draw[rotate around={-30.96:(1.5,2.1)},black,->,thick] (2.25,2.55) -- (1.25,2.55) node[black,anchor=south east] {$\vec{F}_a$};
\draw[blue,->,rotate around={-30.96:(1.5,2.1)}] (4,3) -- (5,3) node[black,anchor=north west] {$x$};
\draw[blue,->,rotate around={-30.96:(1.5,2.1)}] (4,3) -- (4,4) node[black,anchor=west] {$y$};
\draw[red,dashed,thick,rotate around={-30.96:(1.5,2.1)}]
(2.25,2.55) -- ({sin(30.96)},{-cos(30.96)});%just a try
\end{tikzpicture}
\end{figure}
答案1
我认为,图片可以帮到你。让 TikZ 帮你计算三角函数。
当使用该选项将图片放置在路径段上时sloped
,图片的绘制将被旋转和移动,以便其X轴在该点处与路径相切。其原点也位于该路径上。
不幸的是,其中一些设置也适用于图片内的路径,这就是为什么我们需要再次重置它们(这就是您sloped = false
在它们里面看到的原因)。
为了角度标记,我还将使用图片,但图片不是沿着路径放置的,它使用给定的三个坐标并计算所需的角度。
我对它的实现不太满意,这就是为什么在其定义中添加缩短量,以便线条不会穿过我们的三角形。(还有其他更好但更长的解决方案。)
我还命名了坐标,以便以后可以实际引用它们而不必担心转换。
让我们一步一步地创建这个图表。首先,我们从三角形开始,并命名它的角:
\draw (0, 0) coordinate (O)
-- (0, 3) coordinate (A)
-- (5, 0) coordinate (B)
-- cycle;
请注意,这条路径和一条闭合的路径(这就是cycle
的所作所为)。角落看起来会有所不同比你的代码要好。
我们可以将图片放在A
–B
边缘,方法是将其直接放在后面--
(即“隐含地”)或目标坐标之后“明确”地pos
指定了。
因为我在这里使用sloped
,所以图片被旋转,以便X轴沿着线的斜率。
现在,我只画框和矢量线:
\draw[midway, thin] (left:.75) rectangle coordinate () +(1.5,.9);
\path[->, at end, sloped=false]
() edge["\vec F_a" above left] +(left:1)
() edge["\vec N" right] +( up:1)
[reset cm] () edge["\vec P" right] coordinate (P') +(down:1);
由于我已为图片命名,因此box
图片内的所有坐标和节点名称都会带有box
前缀。因此,我用第一条路径绘制的矩形中心坐标(该路径的名称为空)实际上将被命名为box
。
现在,由于图片向上旋转,并且左侧的艺术作品与我们放置盒子的线正交且平行。
对于真正的垂直箭头磷我用reset cm
重置变换矩阵。这不一定会使进入图片之前生效的坐标系生效,但在本例中是相同的。
第二张图片的放置位置非常相似,但只绘制了一个坐标系。由于是= 0 位于我将在其间绘制的线上是= 1 且是= 2 使其浮动在线上方。
现在,它只是三个角度的照片。
以及额外的橙色虚线。这些虚线被放置在behind path
因为我认为如果它们位于三角线后面看起来会更好。
为了绘制垂直虚线,我在垂直矢量的尖端添加了一个坐标P'
(将其命名为)。boxP'
这坐标规范(boxP'|-O)
boxP'
指定穿过 的垂直线和穿过 的水平线之间的交点O
。
如果需要绘制多个这样的图表,建议定义自己的命名图片。在这种情况下,我们可以这样做
\tikzset{
pic node/left/.style=above left,
pic node/up/.style=right,
pic node/right/.style=below right,
pic node/vertical/.style=right,
pics/box with vectors/.style args={#1:#2:#3}{code={
\draw[midway, thin] (left:.75) rectangle coordinate () +(1.5,.9);
\path[->, at end, sloped=false, pic actions]
() edge["{\vec #1}" pic node/left] +(left:1)
() edge["{\vec #2}" pic node/up ] +( up:1)
[reset cm] () edge["{\vec #3}" pic node/vertical]
coordinate (P') +(down:1);}},
pics/coordinate system/.default={x:y},
pics/coordinate system/.style args={#1:#2}{code={
\draw[<->, sloped=false, pic actions]
(up:1) |- node[at start, pic node/up]{$#2$}
node[at end, pic node/right]{$#1$} (right:1);}}}
在路上,你只需
pic[pos=.4, sloped] (box) {box with vectors=F_a:N:P}
pic[near end, sloped, thin, Green, shift=(up:1)] {coordinate system}
同时具有多种pic node/…
样式可供选择,以调整节点的位置或外观。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{angles, arrows.meta, quotes}
\tikzset{math nodes/.style={execute at begin node=$, execute at end node=$}}
\colorlet{Green}{green!75!black}
\begin{document}
\tikz[
pics/angle/.append style={/tikz/shorten >=+.4pt, /tikz/shorten <=+.4pt},
>={Stealth[round]}, % I like this arrow tip better
thick, angle radius=.75cm, angle eccentricity=1.2,
every edge quotes/.append style={math nodes},
every pic quotes/.append style={math nodes, node font=\footnotesize}]
\draw (0, 0) coordinate (O)
-- (0, 3) coordinate (A)
-- (5, 0) coordinate (B)
pic[pos=.4, sloped] (box) {code={
\draw[midway, thin] (left:.75) rectangle coordinate () +(1.5,.9);
\path[->, at end, sloped=false]
() edge["\vec F_a" above left] +(left:1)
() edge["\vec N" right] +( up:1)
[reset cm] () edge["\vec P" right] coordinate (P') +(down:1);
}}
pic[near end, sloped, thin, Green] {code={% yeah, the same trick again
\draw[<->, sloped=false] (0,2) to[at start, "y" right] ++( down:1)
to[at end, "x" below right] ++(right:1);
}}
-- cycle
%
pic[draw, Green, thin, "\theta"] {angle=A--B--O}
pic[draw, blue, thin, "\theta"] {angle=O--box--boxP'}
pic[draw, blue, thin, "\frac{\pi}{2}-\theta" right] {angle=B--O--box}
% I think the dashed lines look better if they're behind the other stuff
[behind path]
(box) edge[orange, densely dashed] (O)
(boxP') edge[orange, dashed] (boxP'|-O)
;
\end{document}
输出
答案2
如果您只对虚线的第一个坐标加波浪线,您就知道第二个坐标是(0,0)
:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}[!h]
\centering
\begin{tikzpicture}
\draw[black,thick] (0,0) -- (5,0);
\draw[black,thick] (0,0) -- (0,3);
\draw[black,thick] (0,3) -- (5,0);
% Adding the angle
\draw (3.5,0) arc (180:135:1) node[midway,anchor=east,black] {$\theta$};
\draw[rotate around={-30.96:(1.5,2.1)}] (1.5,2.1) rectangle (3,3);
\draw[rotate around={-30.96:(1.5,2.1)},black,->,thick] (2.25,2.55) -- (2.25,3.55)node[black,anchor=west] {$\vec{N}$};
\draw[rotate around={-30.96:(1.5,2.1)}, black, ->, thick]
(2.25,2.55) -- ({2.25 + sin(30.96)}, {2.55 - cos(30.96}) node[black,anchor= west] {$\vec{P}$};
\draw[rotate around={-30.96:(1.5,2.1)},black,->,thick] (2.25,2.55) -- (1.25,2.55) node[black,anchor=south east] {$\vec{F}_a$};
\draw[blue,->,rotate around={-30.96:(1.5,2.1)}] (4,3) -- (5,3) node[black,anchor=north west] {$x$};
\draw[blue,->,rotate around={-30.96:(1.5,2.1)}] (4,3) -- (4,4) node[black,anchor=west] {$y$};
\draw[red,dashed,thick]
([rotate around={-30.96:(1.5,2.1)}]2.25,2.55) -- (0,0);%just a try
\end{tikzpicture}
\end{figure}
\end{document}