![如何使用Metapost绘制结构力学右手定则](https://linux22.com/image/359795/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Metapost%E7%BB%98%E5%88%B6%E7%BB%93%E6%9E%84%E5%8A%9B%E5%AD%A6%E5%8F%B3%E6%89%8B%E5%AE%9A%E5%88%99.png)
我需要使用 Metapost 在 Latex 文档中绘制“右手”规则。外观应具有艺术性(即显示真实的手指指向)。如何完成?
答案1
这是 OP 要求的 Metapost 版本。除了绘制手的实际路径顺序外,没有什么非常巧妙的地方。我从方格纸上的草图(我的左手)中捕捉到了这些。希望对其他人有用,因为这些路径可以轻松适应 TikZ。
prologues := 3;
outputtemplate := "%j%c.eps";
vardef left_hand(expr shade) =
save H, N;
path H, N[];
H = (28,-10)..(37.5,0)..(52,9.6)..(60,13.1)..(70,18)..(74,20)..(91,30)
..(101,40)..(106,48)..(110,52)..(115,58)..(116,60)..(116.4,64)..(110,70)
& (110,70)..(112,74)..(110,81)..(108,85)..(102,87)
& (102,87)..(110,91)..(120,95)..(130,98)..(136,100)..(140,103)..(140.4,109)
..(130,112)..(121,111.2)..(110,110)..(100,108)..(90,105)..(86,103)
& (86,103)..(90,111)..(95,119)..(103.5,130)..(112,139)..(120,150)..(113,158)..(110,156)..(91,140)..(70,120)..(59,111)
& (59,111)..(58,120)..(56,130)..(53,140)..(48,150)..(40,154)..(34,150)..(34,140)..(35,130)..(36,120)..(36,110)..(35,100)..(30,80)..(10,51)..(0,42)
&(0,42) {down} .. (28,-10) & cycle;
N0 = buildcycle(H, ((34.5,133.8) .. (38,140) .. (38,149) & (38,149) .. (34,150)));
N3 = (74,44)..(81,50)..(80,57)..(71,52){dir 240}..cycle;
N4 = (85,40)..(90,43)..(92,50)..(90,52)..(84,50)..(81,44)&(81,44)..cycle;
save p; picture p; p = image(
fill H withcolor .9[shade, white];
unfill N0; draw N0;
unfill N3; draw N3;
unfill N4; draw N4;
draw (59,111) { down }..(60,101)..(64,90)..(68,80);
draw (102,146) .. (108,138) {dir -80};
draw (88,132) .. (95,122) { dir -80};
draw (71,112) .. (73,100) .. (72,66) { dir -96};
draw (121,109)..(122,98) { dir -59 };
draw (101,105)..(105,92) { dir -54 };
draw (86,103).. { dir -54 } (89,83) & (89,83) .. (102,87) {2,1};
draw (89,83)..{dir -100}(88,79);
draw (110,70)..(100,64)..(90,56)..(84,50)..(80,44)..(76,41)..
(70,42)..(67,48)..(67,51)..(70,57) ..(80,68)..(96,81);
draw (89,70)..(92,61){dir -90};
draw (106,48)..(90,40)..(82,40)..(80,44);
draw (97,59)..(100,48){dir -100};
draw (65,42)..(60,30)..(58,27);
draw H;
draw (25,64){down}.. (30,39) .. (48,12){dir -40};
) shifted -(45,85) rotated -4; p
enddef;
vardef right_hand(expr shade) =
left_hand(shade) reflectedabout(up,down)
enddef;
beginfig(1);
draw right_hand(red + 1/2 green + 1/8 blue);
path a[];
a1 = origin -- 80 up;
a2 = origin -- 120 up rotated 50;
a3 = origin -- 120 up rotated 80;
for i=1 upto 3:
drawarrow a[i] dashed withdots scaled 1/4 withcolor 2/3 red;
endfor
label.top (btex $a \times b$ etex, point 1 of a1);
label.ulft(btex $a$ etex, point 1 of a2);
label.lft (btex $b$ etex, point 1 of a3);
endfig;
end.
笔记
这两个例程
left_hand
返回right_hand
一个 MPpicture
主例程,draw
或者将其保存为picture
变量。我移动了绘图,以便它能方便地位于原点的中心。当然,您可以根据需要移动或旋转它。
这也意味着可以轻松在左手和右手版本之间切换,使用
reflectedabout(up,down)
微小的负旋转是为了使手指和拇指处于良好的角度:0°、50° 和 80°。这只是偶然,并不是我原计划的一部分。
答案2
使用xelatex
或运行latex->dvips->ps2pdf
\documentclass[pstricks]{article}
\pagestyle{empty}
\usepackage{pst-slpe,pstricks-add}
\definecolor{Weiss}{rgb}{1,0.98,0.98}% 255 250 250
\definecolor{Haut}{rgb}{1,0.894,0.769}% 255 228 196
\definecolor{Auge}{rgb}{0.54,0.27,0.074}% 139 69 19
\begin{document}
\def\RechteHand{%
\begin{pspicture}[shift=-6](0,0)(7,7)
\begin{psclip}
{\pspolygon[linestyle=none](0.2,0.2)(0.2,5)(1.6,6.4)(7,6.4)(7,0.2)}
\pscustom[fillstyle=solid,fillcolor=Haut,linecolor=black!90,linewidth=0.8pt,opacity=0.5]{%
%
%\psset{showpoints}
% Hals links
\psbezier(0.1,4.95)(0.6,4.5)(1.8,4.15)(1.8,3.65)
\psbezier(1.8,2.75)(1.9,3.15)(1.9,2.55)
\psbezier(1.9,2.35)(2.25,2.15)(2.25,1.65)
\psbezier(2.25,1.4)(1.65,0.8)(1.65,0.75)
\psbezier(1.65,0.6)(1.8,0.54)(1.9,0.5)
\psbezier(2,0.44)(2.5,0.6)(2.7,1.05)
\psbezier(3,1.45)(3,1.5)(3,1.8)
\psbezier(3.05,2.1)(3.1,2.1)(3.4,2)
\psbezier(3.6,2)(3.6,1.95)(3.8,1.95)
\psbezier(3.85,1.95)(4.1,1.85)(4.2,1.85)
\psbezier(4.4,1.85)(4.5,1.95)(5,2)
\psbezier(5.4,1.95)(5.5,1.95)(5.8,1.96)
\psbezier(6.55,1.92)(6.7,1.94)(6.7,2.2)
\psbezier(6.7,2.45)(6.1,2.5)(5.9,2.43)
\psbezier(5.8,2.47)(5.2,2.55)(5.1,2.5)
\psbezier(5.0,2.55)(5,2.57)(4.9,2.6)% wichtige Endpunkte f\"{u}r Mittelfinger
\psbezier(4.95,3.0)(4.95,3.0)(4.9,3.6)% wichtige Endpunkte f\"{u}r Start des
%Mittelfingers
\psbezier(4.93,4.0)(4.9,4.0)(4.85,4.5)
\psbezier(4.83,4.8)(4.8,4.6)(4.78,5)% Fingernagel Mittelfinger
\psbezier(4.76,5.2)(4.8,5.0)(4.75,5.35)% Fingernagel Mittelfinger
\psbezier(4.35,5.57)(4.23,5.0)(4.33,4.5)
\psbezier(4.3,4.38)(4.31,4.4)(4.3,4.18)
\psline(4.3,4.18)(4.25,4.16)
\psbezier(4,4.5)(3.4,4.7)(3,4.75)
\psbezier(2.8,4.8)(2.65,5.03)(2.6,5.05)
\psbezier(2.4,5.15)(1.75,5.8)(1.3,6.25)
\closepath
}
\end{psclip}
% Fingernagel Mittelfinger
\pscustom[fillstyle=solid,fillcolor=yellow,linecolor=black!90,linewidth=0.3pt,opacity=1]{%
\psbezier(4.75,5.35)(4.6,5.32)(4.56,5.25)(4.56,5.17)
\psbezier(4.56,4.95)(4.6,4.98)(4.79,5)
\closepath
}
% Fingernagel Ringfinger
\pscustom[fillstyle=solid,fillcolor=red,linecolor=black!90,linewidth=0.3pt,opacity=1]{%
\psbezier(3.53,3.9)(3.46,3.7)(3.4,3.69)(3.25,3.68)
\psbezier(3.2,3.675)(3.17,3.7)(3.23,3.8)
\psbezier(3.3,3.87)(3.33,3.87)(3.4,3.88)
\psbezier(3.5,3.9)(3.5,3.91)(3.53,3.9)
\closepath
}
% Fingernagel kleiner Finger
\pscustom[fillstyle=solid,fillcolor=black,linecolor=black!90,linewidth=0.3pt,opacity=1]{%
\psbezier(4.02,4.12)(4.02,4.0)(3.84,3.96)(3.9,3.97)
\psbezier(3.82,3.95)(3.69,3.94)(3.7,3.96)
\psbezier(3.75,4.07)(3.74,4.04)(3.82,4.08)
\closepath
}
% Fingernagel Daumen
\pscustom[fillstyle=solid,fillcolor=red!20,linecolor=black!90,linewidth=0.3pt,opacity=1]{%
\psbezier(1.92,1.085)(1.93,1.02)(1.8,0.85)(1.66,0.7)
\psbezier(1.64,0.8)(1.64,0.74)(1.92,1.085)
\closepath
}
% Fingernagel Zeigefinger
\pscustom[fillstyle=solid,fillcolor=red!20,linecolor=black!90,linewidth=0.3pt,opacity=1]{%
\psbezier(6.25,1.95)(6.3,2)(6.5,2.01)(6.65,2)
\psbezier(6.63,1.93)(6.35,1.94)(6.25,1.95)
\closepath
}
% Mittelfinger
\psbezier(4.9,2.6)(4.85,2.61)(4.85,2.61)(4.8,2.62)
\psbezier(4.8,2.62)(4.7,2.63)(4.5,2.68)(4.39,2.65)
\psbezier(4.39,2.65)(4.2,3)(4.35,3.5)(4.36,3.6)
\psbezier(4.36,3.6)(4.3,4.0)(4.3,4)(4.3,4.18)
\psbezier(4.8,2.62)(4.85,3)(4.85,3)(4.9,3.5)
% Linien im Mittelfinger
{\psset{linewidth=0.4pt,linecolor=black!50}
\psbezier(4.85,4.6)(4.8,4.59)(4.75,4.59)(4.7,4.56)
\psbezier(4.85,4.5)(4.8,4.49)(4.75,4.49)(4.7,4.47)
%
\psbezier(4.89,3.8)(4.84,3.79)(4.79,3.79)(4.74,3.76)
\psbezier(4.89,3.7)(4.84,3.69)(4.79,3.69)(4.74,3.67)
\psbezier(4.89,3.6)(4.84,3.59)(4.79,3.58)(4.74,3.59)
}
% kleiner Finger
\psbezier(4.25,4.16)(4.15,4.15)(4.1,4.14)(4.02,4.12)
% Ringfinger
\psbezier(4.3,4.02)(4.23,4.01)(4.2,4.02)(4.0,3.98)
\psbezier(4.0,3.98)(3.8,3.97)(3.7,3.95)(3.53,3.9)
%
\psbezier(4.35,3.57)(4.23,3.51)(4.2,3.51)(4,3.54)
\psbezier(4,3.54)(3.4,3.4)(3.12,3.5)(3.2,3.7)
% Linie im Ringfinger
{\psset{linewidth=0.4pt,linecolor=black!50}
\psbezier(4,3.97)(3.9,3.94)(3.9,3.84)(3.88,3.8)
}
% Linien in Zeigefinger und Daumen
{\psset{linewidth=0.4pt,linecolor=black!50}
\psbezier(5.9,2.41)(5.86,2.35)(5.84,2.29)(5.83,2.25)
\psbezier(5.1,2.5)(5.04,2.43)(5.03,2.44)(5.0,2.35)
\psbezier(3.15,2.05)(3.24,2.23)(3.4,2.35)(3.5,2.4)
\psbezier(3.05,2.05)(3.03,2.13)(3.07,2.38)(3.1,2.45)
\psbezier(2.7,1.05)(2.63,1.08)(2.55,1.2)(2.45,1.2)
% Linien in der Handfl\"{a}che
\psbezier(2.1,3.8)(2.05,4.0)(2.4,4.4)(2.8,4.5)
\psbezier(2.83,4.12)(3,4.22)(3.15,4.0)(3.25,3.83)
}
\psline[linewidth=0.8pt,linecolor=red,arrowscale=1.2,arrowlength=1.6,arrowinset=0.05]{->}(4.6,2.2)(4.6,6)
\psline[linewidth=0.8pt,linecolor=blue,arrowscale=1.2,arrowlength=1.6,arrowinset=0.05]{->}(4.6,2.2)(7,2.2)
\psline[linewidth=0.8pt,linecolor=green,arrowscale=1.2,arrowlength=1.6,arrowinset=0.05]{->}(4.6,2.2)(3,0.6)
%\psgrid[subgriddiv=5,gridlabels=10pt,gridwidth=0.6pt,gridcolor=green!80,subgridwidth=0.2pt,subgridcolor=green!50]
\end{pspicture}}
\RechteHand %
\psscalebox{-1 1}{\RechteHand }
\end{document}
答案3
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[portuguese]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{fourier}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usetikzlibrary{shapes,shadows,calc}
\usetikzlibrary{positioning,calc}
\usepackage{lipsum}
\usepackage{gnuplot-lua-tikz}
%
\usepackage{indentfirst}
\setlength{\parskip}{.5cm}
\usetikzlibrary{angles,quotes}
\usepackage{xcolor}
\usepackage{enumitem}
\usetikzlibrary{scopes,patterns,intersections}
\usetikzlibrary{decorations.markings}
\usepackage{tikzpagenodes}
\usetikzlibrary{shapes.geometric,calc}
\usetikzlibrary{patterns,snakes}
\usetikzlibrary{tikzmark}
\usetikzlibrary{calc}
\usetikzlibrary{tikzmark}
%% USO DE CAMADAS (layers)
\pgfdeclarelayer{background}
\pgfdeclarelayer{main}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
%%exemplo
%% \begin{pgflayer}{background} \end{pgflayer}
\definecolor{crimsonglory}{rgb}{0.75, 0.0, 0.2}
\definecolor{cor1}{HTML}{57C3CF}
\definecolor{cor2}{HTML}{4EA8B1}
\definecolor{almond}{rgb}{0.94, 0.87, 0.8}
\definecolor{aliceblue}{rgb}{0.94, 0.97, 1.0}
\definecolor{darkmagenta}{rgb}{0.55, 0.0, 0.55}
\begin{document}
\begin{tikzpicture}[scale=0.4,
% rotate=15,
font=\footnotesize,%\tiny
line cap=round,
line join=round,
>=stealth,
]
%% coordenadas
\coordinate (0) at (0,0);
\coordinate (AB) at (0,4);
\coordinate (A) at (-5.5,4.85);
\coordinate (B) at (-6.5,1.2);
\coordinate (B1) at (2.8,-2.2);
\coordinate (B2) at (1.5,-5.5);
\coordinate (B3) at (.3,3.8);
\coordinate (B4) at (-1.75,1.5);
\coordinate (B5) at (-1.5,-1.2);
\coordinate (B6) at (-4.5,1.1);
\coordinate (B7) at (-4.5,0.5);
\coordinate (B8) at (-3.4,.8);
\coordinate (B9) at (-3.5,0.2);
\coordinate (B10) at (-3.5,3.4);
\coordinate (B11) at (-3.85,2.8);
% dedo 2
\coordinate (M1) at (-2.5,.9);
\coordinate (M2) at (-4,1.34);
\coordinate (M3) at (-5,1.32);
\coordinate (M4) at (-5.5,1.2);
\coordinate (M5) at (-5.8,0.8);
\coordinate (M6) at (-5.5,0.6);
\coordinate (M7) at (-5,0.5);
\coordinate (M8) at (-4.2,0.2);
\coordinate (M9) at (-3.55,-0.1);
\coordinate (M10) at (-3.2,-0.2);
\coordinate (M11) at (-2.7,-0.3);
\coordinate (M12) at (-3.45,-0.2);
\coordinate (M13) at (-3.875,-0.4);
\coordinate (M14) at (-3.95,-0.8);
\coordinate (M15) at (-3.55,-1.3);
\coordinate (M16) at (-2.5,-1.9);
%%
\coordinate (B12) at (-2.7,2.5);
\coordinate (B13) at (-3,2);
\coordinate (X1) at (5,0);
\coordinate (Y1) at (0,5);
\coordinate (X2) at (-6,0);
\coordinate (Y2) at (0,-6);
%% controls coordinates
\coordinate (C0) at (0,4.2);
\coordinate (C01) at (-0.4,3.8);
\coordinate (C1) at (-0.7,3);
\coordinate (C2) at (-0.8,2);
\coordinate (C3) at (-0.95,1);
\coordinate (C4) at (-1.5,-0.5);
\coordinate (U1) at (0.3,3.9);
\coordinate (U2) at(0.2,3.8);
\coordinate (U3) at(0.1,3.5);
\coordinate (U4) at (0.15,2.8);
\coordinate (U5) at (0.20,2.85);
\coordinate (U6) at (0.25,2.9);
\coordinate (p1) at (-.9,1.56);
\coordinate (p2) at (-2,2);
\coordinate (p3) at (-2.75,3.25);
\coordinate (p4) at (-4,3.8);
\coordinate (p5) at (-4.5,3.75);
\coordinate (p6) at (-4.5,3);
\coordinate (p7) at (-3.2,1.9);
\coordinate (p8) at (-3.199,1.9);
\coordinate (p9) at (-2.5,1.2);
\coordinate (p10) at (-2.3,0.6);
\coordinate (p11) at (-2.6,-0.2);
\coordinate (p12) at (-5.8,0.85);
\coordinate (p13) at (-5.5,1.25);
\coordinate (p14) at (-4,1.15);
\coordinate (p15) at (-3,2);
\coordinate (p16) at (-2.3,1.3);
\coordinate (p17) at (-3.5,1.65);
\coordinate (p18) at (-4,1.75);
\coordinate (p19) at (-4.5,1.65);
\coordinate (p20) at (-5,1.6);
\coordinate (p21) at (-5.5,1.74);
\coordinate (p22) at (-5.8,1.5);
\coordinate (p23) at (-5.5,.1);
\coordinate (p24) at (-4.5,0);
\coordinate (p25) at (-3.5,-0.3);
\coordinate (p26) at (-5.6,0.4);
\coordinate (p27) at (-5.7,0.3);
\coordinate (p28) at (-5.6,0.1);
% eixos desenhos
%\draw[dashed] (X2) -- (X1) (Y2) -- (Y1);
%% bends para parte inferior e lateral direita da maão
%% linha das maos (hands)
\draw[black!70] (B1) to [bend left] (B2);
\draw[black!70] (B3) to [bend right] (B1);
\draw[black!70] (B4) to [bend right] (B5);
\draw[black!70] (B6) to [bend left] (B7);
\draw[black!70] (B8) to [bend left] (B9);
\draw[black!70] (B10) to [bend left] (B11);
\draw[black!70] (B12) to [bend left] (B13);
\begin{scope}[on background layer]
%nail 1
\draw[black!40,fill=gray!70] (B3) .. controls (U1) and (U2) .. (U3)
.. controls (U4) and (U5) .. (U6);
\draw[black!70] (1.2,-1.2) to [bend left] (0.2,-4);
\end{scope}
\begin{scope}[on background layer]
\draw (B3) .. controls (C0) and (C01) .. (C1)
.. controls (C2) and (C3) .. (C4);
\draw (B2) .. controls (0,-3.6) and (-1.5,-4) .. (-3.2,-2.53);
\end{scope}
%%nail 2
\draw[black!40,fill=gray!70] (-1.8,-2.6) .. controls (-1.5,-2.2) and (-2.1,-1.8) .. (-2.5,-2) -- cycle;
%%nail 2
\filldraw[gray!70] (-2.4,-2.2) to [bend right] (-2.7,-2.7) .. controls (-2.3,-2.60) and (-2.2,-2.6).. (-2.4,-2.2) -- cycle;
\draw[black!70] (-1.24,-2.7) to [bend right] (-.5,-3.5);
\draw[black!70] (-3.3,-1.65) to [bend right] (-3.6,-2.1);
\draw[black!70] (-2.5,-1.2) to [bend right] (-2.7,-1.5);
%% finger 2
\draw (M1) .. controls (M2) and (M3) .. (M4)
.. controls (M5) and (M6) .. (M7);
\draw (M7) .. controls (M8) and (M9) .. (M10);
%% finger 3
\draw (M10) .. controls (M11) and (M12) .. (M9) .. controls (M13) and (M14) .. (M15);
\draw (M15) .. controls (M16) and (M16) .. (-2.2,-2.4) .. controls (-1.8,-2.8) and (-1.6,-2.4) .. (-1.6,-2.4);%(-1.4,-1.9);
\draw (-1.6,-2.4) .. controls (-1.4,-1.9) and (-1.9,-1) .. (-2.2,-0.85);
% finger 4
\draw (M15) .. controls (-4.1,-1.3) and (-4,-1.85) .. (-3.75,-2.2) .. controls (-2.8,-2.8) and (-2.2,-2.9) .. (-2.2,-2.4);
\begin{scope}[on background layer]
\draw[black] (p1) .. controls (p2) and (p3) .. (p4)
.. controls (p5) and (p6) .. (p7);
\draw[black] (p8) .. controls (p9) and (p10) .. (p11);
\end{scope}
\draw[black!70,dashed,->] (1,4) to [bend right] (-1,4);
\draw[line width=1.2pt,->,teal] (0) -- (A) node[left,black] {$\vec{u}$};
\draw[line width=1.2pt,->,darkmagenta] (0) -- (B) node[left,black] {$\vec{v}$};
\draw[line width=1.2pt,->] (0) -- (0,5) node[above] {$\vec{u}\times \vec v$};
\end{tikzpicture}
\end{document}