有没有办法导入对象的 3D 文件(例如 .stl)以便将其 2D 投影绘制到 TeX 文档中?
我很惊讶没有找到有关该问题的任何主题,我认为可以使用 TikZ 或 Asymptote 进行转换。
有什么线索吗?
答案1
pgfplots
支持将其作为其绘图处理程序的一部分patch
。它有两种不同的输入语法选择:
\begin{tikzpicture}
\begin{axis}
% FokkerDrI_layer_0.facetIdx.dat contains:
% # each row makes up one facet; it
% # consists of 0-based indices into
% # the vertex array
% 0 1 2 % triangle of vertices #0,#1 and #2
% 0 3 1 % triangle of vertices #0,#3 and #1
% 3 4 1
% 5 6 7
% 6 8 7
% 8 9 7
% 8 10 9
% ...
% while FokkerDrI_layer_0.vertices.dat contains
% 105.577 -19.7332 2.85249 % vertex #0
% 88.9233 -21.1254 13.0359 % vertex #1
% 89.2104 -22.1547 1.46467 % vertex #2
% 105.577 -17.2161 12.146
% 105.577 -10.6054 18.7567
% 105.577 7.98161 18.7567
% 105.577 14.5923 12.146
% ...
\addplot3[patch,shader=interp,
patch table=
{plotdata/FokkerDrI_layer_0.facetIdx.dat}]
file
{plotdata/FokkerDrI_layer_0.vertices.dat};
\end{axis}
\end{tikzpicture}
或者
\begin{tikzpicture}
\begin{axis}[axis equal]
% FokkerDrI_layer_0.patches.dat contains:
% # each row is one vertex; three consecutive
% # vertices make one triangle (patch)
% 105.577 -19.7332 2.85249
% 88.9233 -21.1254 13.0359
% 89.2104 -22.1547 1.46467
% # end of facet 0
% 105.577 -19.7332 2.85249
% 105.577 -17.2161 12.146
% 88.9233 -21.1254 13.0359
% # end of facet 1
\addplot3[patch]
file
{plotdata/FokkerDrI_layer_0.patches.dat};
\end{axis}
\end{tikzpicture}
.3ds
该模型是我自己的档案中的几个文件之一(我编写了一个 C++ 程序,将.3ds
文件转换为上面提到的格式)。
该示例取自 pgfplots 手册(比较http://pgfplots.sourceforge.net/pgfplots.pdf部分“斑块图”)。数据文件随附pgfplots
。
pgfplots
支持带有明确颜色的色彩图或色块图。纹理映射或照明超出范围。
答案2
例如使用pst-solides3d
。如果您的数据定义了一个函数或简单的 3d 点,则可以使用 绘制这些点pst-plot3d
。如果数据描述的是 3d 实体,则以这种方式使用它。使用 运行它xelatex
:
\documentclass{minimal}
\usepackage[svgnames]{pstricks}
\usepackage{pst-solides3d}
\begin{document}
\psset{unit=0.4}
\begin{pspicture}(-4,-8)(6,6)
\psset{lightsrc=30 -40 10,viewpoint=50 -50 20 rtp2xyz,Decran=50,
RotX=90,sommets=(sommets_nefer.dat) run}
\psSolid[object=new,fillcolor=AntiqueWhite,linewidth=0.5\pslinewidth,faces=(faces_nefer.dat) run]
\end{pspicture}
\end{document}
数据文件是索梅茨_尼弗定义多边形的坐标,脸部检查器定义区域。每个坐标三元组都用 0、1、2、... 编号。这些数字用于多边形。例如:
\psset{unit=0.75cm,lightsrc=10 -20 50,viewpoint=50 -20 30 rtp2xyz,Decran=50}
\begin{pspicture}(-5.5,-2)(6,6)
\psSolid[object=new,fillcolor=red!50,incolor=yellow,action=draw,
sommets= 2 4 3 -2 4 3 -2 -4 3 2 -4 3 2 4 0
-2 4 0 -2 -4 0 2 -4 0 0 4 5 0 -4 5,
faces={ [0 1 2 3][7 6 5 4][0 3 7 4][3 9 2][1 8 0]
[8 9 3 0][9 8 1 2][6 7 3 2][2 1 5 6]},
num=all,show=all]
\end{pspicture}