这是对问题的扩展这里。我尝试了同样的逻辑来处理多粒子环境。立方体盒子里有大约 100 个粒子。但为了简单起见,我只导出 10 个粒子。
我从 Matlab 获得的效果图是:
我从 收到以下信息matlab2tikz
:
使用上面链接的解决方案,我得到了这个:
我需要在这里采用不同的策略来实现与单粒子链接中的解决方案类似的渲染。
奇怪的是,我现在还注意到 Matlab 和 Matlab2tikz 中的粒子顺序不同。
答案1
我知道你还想问其他问题,但我还是忍不住要向你展示一下用 asympote 做这些事情是多么简单。如果你编译
\documentclass[border=3.14mm]{standalone}
\usepackage{asypictureB}
\begin{document}
% code essentially from https://tex.stackexchange.com/a/141478/121799
\begin{asypicture}{name=particles}
import three;
settings.render=8;
settings.prc=false;
settings.outformat = "pdf";
size(10cm);
currentprojection = orthographic((3,4,5));
material cylcolor = material(diffusepen=gray(0.9), ambientpen=gray(0.9));
real cylRadius = 0.1;
real sphereRadius = 0.1;
void drawRod(triple a, triple b) {
surface rod = extrude(scale(cylRadius)*unitcircle, axis=length(b-a)*Z);
triple orthovector = cross(Z, b-a);
if (length(orthovector) > .01) {
real angle = aCos(dot(Z, b-a) / length(b-a));
rod = rotate(angle, orthovector) * rod;
}
draw(shift(a)*rod, surfacepen=cylcolor);
}
void drawSphere(triple center) {
draw(shift(center)*scale3(sphereRadius)*unitsphere, surfacepen=cylcolor);
}
void drawParticle(triple endA, triple endB){
drawSphere(endA);
drawSphere(endB);
drawRod(endA,endB);
}
drawParticle(O,0.5X);
drawParticle(Z,Z+0.5(X+Y)/sqrt(2));
drawParticle(2Z,2Z+0.5Y);
\end{asypicture}
\end{document}
pdflatex -shell-escape
你会得到
我不知道放置这些东西的算法,但我无法想象在渐近线中实现它会很困难,或者让 matlab 将相关数据写入一段渐近线代码中。