漸近線アプローチ

漸近線アプローチ

3D RGB キューブを描画する必要がありますasymptote

例を見つけることができますか?ここでいくつか例を見ましたhttp://www.piprime.fr/files/asymptote/odoc/index.htmlしかし、RGB キューブの描き方がわかりません。(下の画像は単なる例です。PDF ファイルに変換できる 3D モデルが必要です)

ここに画像の説明を入力してください

答え1

漸近線アプローチ

顔を3つ描きました。残りも完成させられるといいですね。

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でこれができるかどうかは分かりません。しかし、のパッチ。

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

関連情報