我需要在其中绘制 3D RGB 立方体asymptote
。
我能找到一个例子吗?我在这里看到了一些例子http://www.piprime.fr/files/asymptote/odoc/index.html,但我无法想象如何绘制 RGB 立方体。(下图只是一个例子。我需要一个 3d 模型,我可以将其转换为 pdf 文件)
答案1
渐近线方法
我画了三张脸。希望你能完成剩下的。
import three;
int n=5;
int L=5;
for (int i=0;i<=n;++i){
for (int j=0;j<=n;++j){
pen p=rgb(i/n,j/n,0);
path3 q=scale3(L/n)*shift(i,j,0)*plane((1,0,0),(0,1,0),(0,0,0));
draw(surface(q),p,nolight);
}
}
for (int i=0;i<=n;++i){
for (int j=0;j<=n;++j){
pen p=rgb(i/n,0,j/n);
path3 q=scale3(L/n)*shift(i,0,j)*plane((1,0,0),(0,0,1),(0,0,0));
draw(surface(q),p,nolight);
}
}
for (int i=0;i<=n;++i){
for (int j=0;j<=n;++j){
pen p=rgb(0,i/n,j/n);
path3 q=scale3(L/n)*shift(0,i,j)*plane((0,1,0),(0,0,1),(0,0,0));
draw(surface(q),p,nolight);
}
}
pgfplots 方法
说实话,我不知道 Asymptote 是否可以做到这一点。但肯定可以使用pgf图的补丁。
\documentclass[border=9,tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\definecolor{000}{rgb}{0,0,0}
\definecolor{001}{rgb}{0,0,1}
\definecolor{010}{rgb}{0,1,0}
\definecolor{011}{rgb}{0,1,1}
\definecolor{100}{rgb}{1,0,0}
\definecolor{101}{rgb}{1,0,1}
\definecolor{110}{rgb}{1,1,0}
\definecolor{111}{rgb}{1,1,1}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis equal]
\addplot3[surf,shader=interp,patch,patch type=rectangle,mesh/color input=explicit]
coordinates{
(0,-.01,1)[color=001](1,-.01,1)[color=101]
(1,-.01,0)[color=100](0,-.01,0)[color=000]
(1.01,0,1)[color=101](1.01,1,1)[color=111]
(1.01,1,0)[color=110](1.01,0,0)[color=100]
(0,1,1.01)[color=011](1,1,1.01)[color=111]
(1,0,1.01)[color=101](0,0,1.01)[color=001]
}
;
\end{axis}
\end{tikzpicture}
\end{document}
答案2
我的另一个解决方案
import three;
size(500);
draw(surface((0,0,0)--(0,1,0)--(1,1,0)--(1,0,0)--cycle, new pen[] {black,blue,cyan,green}));
draw(surface((1,1,0)--(0,1,0)--(0,1,1)--(1,1,1)--cycle, new pen[] {cyan,blue,magenta,white}));
draw(surface((0,0,1)--(0,1,1)--(0,1,0)--(0,0,0)--cycle, new pen[] {red,magenta,blue,black}));
draw(surface((0,0,1)--(0,1,1)--(1,1,1)--(1,0,1)--cycle, new pen[] {red,magenta,white,yellow}));
draw(surface((1,0,1)--(0,0,1)--(0,0,0)--(1,0,0)--cycle, new pen[] {yellow,red,black,green}));
draw(surface((1,0,1)--(1,1,1)--(1,1,0)--(1,0,0)--cycle, new pen[] {yellow,white,cyan,green}));