Enfoque asíntota

Enfoque asíntota

Necesito dibujar un cubo 3D RGB en formato asymptote.

¿Puedo encontrar un ejemplo de ello? Vi algunos ejemplos aquí.http://www.piprime.fr/files/asymptote/odoc/index.html, pero no puedo imaginar cómo dibujar un cubo RGB. (La imagen a continuación es solo un ejemplo. Necesito un modelo 3D, que pueda convertir en un archivo pdf)

ingrese la descripción de la imagen aquí

Respuesta1

Enfoque asíntota

Dibujé tres caras. Espero que puedas terminar el resto.

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);
    }
}

enfoque pgfplots

Sinceramente, no sé si Asíntota puede hacer esto. Pero ciertamente es factible usandoEl parche.

\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}

Respuesta2

Mi otra solución

        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}));

información relacionada