答案1
这不是您问题的完整答案(即,这是我在这个社区中针对 tikz 的第一个答案。:))但是,一旦您绘制了形状,就需要将每个顶点与变换矩阵相乘。我修改了这个代码并添加球体。结果是
对于绕 z 轴旋转,这是结果(即旋转顺序 zyz,但你可以更改它,请参阅此链接。
其他变换很简单。只需定义一个变量,并用立方体的顶点击中它即可。
\documentclass{article}
\usepackage[table,dvipsnames]{xcolor}
\usepackage{tikz}
\usepackage{tikz-3dplot}
\usepackage{amssymb}
\usepackage{xifthen}
\tdplotsetmaincoords{60}{125}
\tdplotsetrotatedcoords{0}{0}{0} %<- rotate around (z,y,z)
\begin{document}
\begin{tikzpicture}[scale=3,tdplot_rotated_coords,
cube/.style={very thick,black},
grid/.style={very thin,gray},
axis/.style={->,blue,ultra thick},
rotated axis/.style={->,purple,ultra thick}]
%draw a grid in the x-y plane
\foreach \x in {-0.5,0,...,2.5}
\foreach \y in {-0.5,0,...,2.5}
{
\draw[grid] (\x,-0.5) -- (\x,2.5);
\draw[grid] (-0.5,\y) -- (2.5,\y);
}
%draw the main coordinate frame axes
\draw[axis,tdplot_main_coords] (0,0,0) -- (3.5,0,0) node[anchor=west]{$x$};
\draw[axis,tdplot_main_coords] (0,0,0) -- (0,3.5,0) node[anchor=north west]{$y$};
\draw[axis,tdplot_main_coords] (0,0,0) -- (0,0,3.5) node[anchor=west]{$z$};
%draw the rotated coordinate frame axes
\draw[rotated axis] (0,0,0) -- (3,0,0) node[anchor=west]{$x'$};
\draw[rotated axis] (0,0,0) -- (0,3,0) node[anchor=south west]{$y'$};
\draw[rotated axis] (0,0,0) -- (0,0,3) node[anchor=west]{$z'$};
%draw the top and bottom of the cube
\draw[cube,fill=blue!5] (0,0,0) -- (0,2,0) -- (2,2,0) -- (2,0,0) -- cycle;
%draw the top and bottom of the cube
\draw[cube,fill=red!5] (0,0,0) -- (0,2,0) -- (0,2,2) -- (0,0,2) -- cycle;
%draw the top and bottom of the cube
\draw[cube,fill=green!5] (0,0,0) -- (2,0,0) -- (2,0,2) -- (0,0,2) -- cycle;
\foreach \x in {0,1,2}
\foreach \y in {0,1,2}
\foreach \z in {0,1,2}{
%#####################################################
\ifthenelse{ \lengthtest{\x pt < 2pt} }
{
% True
\draw [black] (\x,\y,\z) -- (\x+1,\y,\z);
}
{% False
}
%#####################################################
\ifthenelse{ \lengthtest{\y pt < 2pt} }
{
% True
\draw [black] (\x,\y,\z) -- (\x,\y+1,\z);
}
{% False
}
%#####################################################
\ifthenelse{ \lengthtest{\z pt < 2pt} }
{
% True
\draw [black] (\x,\y,\z) -- (\x,\y,\z+1);
}
{% False
}
\shade[rotated axis,ball color = purple!80] (\x,\y,\z) circle (0.06cm);
}
\end{tikzpicture}
\end{document}
答案2
tikz 的特点是,由于它具有很强的可塑性,您可以从多个示例中选取一些并制作自己的示例。
以下是您可能需要寻找的一些示例(拉伸之前):
一个长方体:http://www.texample.net/tikz/examples/cuboid/
交换图:http://www.texample.net/tikz/examples/commutative-diagram/
剩下的就是调整基础代码
一个简单的 3D 图形:http://www.texample.net/tikz/examples/3d-graph-model/
还有很多其他的例子:http://www.texample.net/tikz/examples/all/
如果你想查看内部内容,请点击下载为[TEX]
我认为拉伸部分是点放置的问题