10 请问 Tikz 如何画出矢量和三个坐标轴的夹角?

发布于 2023-03-03 15:33:14

请问 Tikz 如何画出矢量和三个坐标轴的夹角?
不一定按照图中的,就是想画出来 α、β、γ 三个角(弧线)。

e27d8bea0df11c93607e35ea01669eed.png

查看更多

关注者
0
被浏览
2.4k
2 个回答
其实有点卡
其实有点卡 2023-03-05
这家伙很懒,什么也没写!

这种图可以用 tikz-3dplot 宏包,其手册封面便展示了类似的,可以试试。

image.png

Sagittarius Rover
Sagittarius Rover 2026-03-15
这家伙很懒,什么也没写!

@u444 代码要尽量给完整,不要只给一个片段,同时要放在代码块内。

注意到原图其实是想表达3D的角度,原图的展示不符合实际情况,你在评论区中给出的图又完全是2D的,也似乎不完全符合实际情况。

以下是基于luadraw的一个可能方案,可以解决「但是代码不够好看以及视角不够灵活等缺点」,需要自行安装并用lualatex编译:

\documentclass{standalone}
\usepackage[3d]{luadraw}
\usepackage[svgnames]{xcolor}
\usepackage{fourier}
\begin{document}
\begin{luadraw}{name=axis_vector}
local g = graph3d:new{ 
    window3d={-1,9,-1,9,-1,9}, 
    window = {-6,8,-5,8},size={12,12},
    viewdir=perspective("xy",0.8,60), 
    pictureoptions="every node/.append style={scale=1.5}"
}
local O,delta,P = Origin,-3, M(6.5, 6, 4)
local Pxz = pxz(P)
local Px,Pz,Py = px(Pxz), pz(Pxz), py(P)
local t1, t2, t3 = M(delta, 0, P.z), M(delta,0, 0), M(delta, P.y, 0)

g:Dpolyline3d({{O, 7*vecI}, {O, 7*vecJ}, {O, 7*vecK}}, "-Stealth,solid,black, line width=1pt")
g:Dlabel3d(
    "$x$", 7*vecI, {pos="N",dist=0.1}, 
    "$y$", 7*vecJ, {pos="W"}, 
    "$z$", 7*vecK, {pos="E"}
    )

g:Dpolyline3d({{P,Py}, {P,Pxz}, {Pxz,Px}, {Pxz,t1},{O,Pxz}}, "dashed,blue,thick")
g:Dpolyline3d({{O,t2}, {Py,t3}}, "dashed,black,thick")

g:Dpolyline3d({{t1,t2}, {t2,t3}, {Pxz,Pz}}, "Stealth-Stealth,dashed,magenta,thick")
g:Dlabel3d(
    "$z$", (t1+t2)/2, {pos="NW",node_options="text=magenta"},
    "$y$", (t2+t3)/2, {pos="W"},
    "$x$", (Pxz+Pz)/2, {pos="S"}
)

g:Dseg3d({O, P}, "-latex,PaleVioletRed,line width=4pt")
g:Dpolyline3d({{O, 2.5*vecI}, {O, 2.5*vecJ}, {O, 2.5*vecK}}, "-latex,cyan,line width=3pt")
g:Dlabel3d("$\\vec{i}$", 2.5*vecI, {pos="S",node_options="text=cyan"}, "$\\vec{j}$", 2.5*vecJ, {pos="W"}, "$\\vec{k}$", 2.5*vecK, {})

g:Ddots3d({P}, "PaleVioletRed,scale=4", 1.5)
g:Dlabel3d("$P$", P, {pos="NE"},"$\\vec{r}$", P, {pos="W",dist=0.35,node_options="text=PaleVioletRed"})

for _,i in ipairs({Px, Py, Pz}) do
    g:Ddots3d({i}, "blue", 1.5)
end

local configs = {
    {pt=Px, col="blue"},
    {pt=Py, col="green"},
    {pt=Pz, col="violet"}
}
for _, item in ipairs(configs) do
    g:Dpath3d({item.pt, O, P, 3.75, 1, "ca", O, "l"}, "draw=none,opacity=0.2,fill=" .. item.col)
    g:Darc3d(item.pt, O, P, 3.75, 1, "-Stealth,thick," .. item.col .. ",ultra thick")
end

g:Dlabel(
    "$\\alpha$",Z(3.25,1), {node_options="text=blue"},
    "$\\beta$", Z(1.5,3), {node_options="text=green"},
    "$\\gamma$", Z(0.5,-1.2), {node_options="text=violet"}
)

g:Show()

\end{luadraw}
\end{document}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览