具有相交平面的 3D 陰影鑽石

具有相交平面的 3D 陰影鑽石

我需要一些幫助才能在 LaTex 中獲得這個數字:

在此輸入影像描述

帶有陰影的形狀。這是我到目前為止所擁有的。

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{intersections,calc}
\usepackage{tikz-3dplot}

\begin{document}


\tdplotsetmaincoords{70}{110}
\begin{tikzpicture}[scale=3,tdplot_main_coords,>=latex]
    \filldraw[
        draw=blue,%
        fill=blue!20,%
    ]          (0,0,1)
            -- (0,1,0)
            -- (1,0,0)
            -- cycle;
    \filldraw[
        draw=blue,%
        fill=blue!20,%
    ]          (0,1,0)
            -- (-1,0,0)
            -- (0,0,1)
            -- cycle;
    \filldraw[
        draw=blue,%
        fill=blue!20,%
    ]          (1,0,0)
            -- (0,-1,0)
            -- (0,0,1)
            -- cycle;
    \filldraw[
        draw=blue,%
        fill=blue!20,%
    ]          (0,-1,0)
            -- (-1,0,0)
            -- (0,0,1)
            -- cycle;
\filldraw[
draw=blue,%
fill=blue!20,%
    ]          (1,0,0)
            -- (0,1,0)
            -- (0,0,-1)
            -- cycle;
\filldraw[
draw=blue,%
fill=blue!20,%
    ]          (1,0,0)
            -- (0,-1,0)
            -- (0,0,-1)
            -- cycle;

    \filldraw[
        draw=red,%
        fill=red!20,%
    ]          (1,1,1)
            -- (1,-1,1)
            -- (-1,-1,1)
            -- (-1,1,1)
            -- cycle;             
    \draw[thick,->] (-2,0,0) -- (2,0,0) node[anchor=north east]{$x$};
    \draw[thick,->] (0,-2,0) -- (0,2,0) node[anchor=north west]{$y$};
    \draw[thick,->] (0,0,-2) -- (0,0,2) node[anchor=south]{$z$};
\end{tikzpicture}

\end{document} 

在此輸入影像描述

答案1

我借助\foreach語句和\ifthenelseifthen 套件繪製菱形,讓生活變得更輕鬆。到目前為止,你的工作基本上缺少的是一些不透明性(請參閱 pgf 手冊第 23 節)

編輯

我對之前給的程式碼做了一些調整。我無法透過旋轉圖形使 y 軸水平,同時保持 z 軸垂直且 x 軸可見。所以我決定透過更改 x 向量來使用非正交座標系(請參閱程式碼註解)。繪製第二張圖時,我假設線相交於 (0,-0.5,1)。

編輯

在 tikzpicture 選項中定義了導致座標系非正交的 x 向量以簡化程式碼。

請注意,該程式碼會產生雙面文檔

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{intersections,calc}
\usepackage{tikz-3dplot}
\usepackage{ifthen}

\begin{document}

\tdplotsetmaincoords{70}{90}
\begin{tikzpicture}[scale=3,tdplot_main_coords,>=latex, x={(1,-0.5,0)}]
        %
    % plotting the coordinate system before the diamond to make it appear covered
    % setting the x-vector to x={(1,-0.5,0)} enables to plot a non orthogonal coordinate system
        %
    \draw[thick] (-2,0,0)--(-1,0,0);
    \draw[thick,dashed](-1,0,0)--(1,0,0);
    \draw[thick] (0,-2,0)--(0,-1,0);
    \draw[thick,dashed](0,-1,0)--(0,1,0);
    \draw[thick,->] (0,1,0)--(0,2,0) node[anchor=north east]{$y$};
    \draw[thick] (0,0,-2)--(0,0,-1);
    \draw[thick,dashed](0,0,-1)--(0,0,1);

    % plotting the diamond by repeated commands
    \foreach \x in {-1,1}{
        \foreach \y in {-1,1} {
            \foreach \z in {-1,1} {
                \ifthenelse{\x=-1}{
                \filldraw[fill opacity=0.3, draw=blue, fill=blue!20, loosely dashed]
                (0,0,\z)--(0,\y,0)--(\x,0,0)--cycle;
                }{
                \filldraw[fill opacity=0.3, draw=blue, fill=blue!20]
                (0,0,\z)--(0,\y,0)--(\x,0,0)--cycle;
                }
            }
        }
    }

    % plotting the plane and the annotation $\Theta$ at the correct point
    \filldraw[fill opacity=0.75, draw=red, fill=red!20]
    (0.75,1,1)--(0.75,-1,1)--(-0.75,-1,1) node[above] {$\Theta$}--(-0.75,1,1)--cycle;

    % plotting the part of the axes which is not covered by the diamond
    \draw[thick,->] (0,0,1)--(0,0,2) node[anchor=north east]{$z$}; 
    \draw[thick,->] (1,0,0)--(2,0,0) node[anchor=north east]{$x$}; 

    % plotting point at upper tip of diamond and annotation     
    \filldraw[ultra thick] (0,0,1) circle (0.5pt) ++ (0,-0.14,0.1) node{(0,0,1) \ $\hat{\theta}$};
%   
\end{tikzpicture}
%
%
\tdplotsetmaincoords{70}{90}
\begin{tikzpicture}[scale=3,tdplot_main_coords,>=latex, x={(1,-0.5,0)}]

    % plotting the coordinate system before the diamond to make it appear covered
    % setting the x-vector to x={(1,-0.5,0)} enables to plot a non orthogonal coordinate system
    \draw[thick] (-2,0,0)--(-1,0,0);
    \draw[thick,dashed](-1,0,0)--(1,0,0);
    \draw[thick] (0,-2,0)--(0,-1,0);
    \draw[thick,dashed](0,-1,0)--(0,1,0);
    \draw[thick,->] (0,1,0)--(0,2,0) node[anchor=north east]{$y$};
    \draw[thick] (0,0,-2)--(0,0,-1);
    \draw[thick,dashed](0,0,-1)--(0,0,1);

    % plotting the diamond by repeated commands
    \foreach \x in {-1,1}{
        \foreach \y in {-1,1} {
            \foreach \z in {-1,1} {
                \ifthenelse{\x=-1}{
                \filldraw[fill opacity=0.3, draw=blue, fill=blue!20, loosely dashed]
                (0,0,\z)--(0,\y,0)--(\x,0,0)--cycle;
                }{
                \filldraw[fill opacity=0.3, draw=blue, fill=blue!20]
                (0,0,\z)--(0,\y,0)--(\x,0,0)--cycle;
                }
            }
        }
    }

    % plotting the part of the axes which is not covered by the diamond
    \draw[thick,->] (0,0,1)--(0,0,2) node[anchor=north east]{$z$}; 
    \draw[thick,->] (1,0,0)--(2,0,0) node[anchor=north east]{$x$};  

    % plotting points at upper tip and left line of diamond and annotation   
    \filldraw[ultra thick] (0,0,1) circle (0.5pt) ++ (0,0.1,0.1) node{$\hat{\theta}_1$};
    \filldraw[ultra thick] (0.5,-0.5,0) circle (0.5pt) ++ (0,-0.1,-0.1)node{$\hat{\theta}_2$};

    % plotting upper line and annotation   
    \draw (0,1.5,1) node[above left]{$\Theta_1$} --(0,-1.5,1);

    % plotting vertical line and annotation, I assumed the lines to intersect at (0,-0.5,1)
    \draw (1,-0.5,-1) node[right]{$\Theta_2$}--(-0.25,-0.5,1.5);
\end{tikzpicture}

\end{document}

在此輸入影像描述 在此輸入影像描述

相關內容