多胞形作为 R3 (xyz) 笛卡尔空间中的不等式系统解

多胞形作为 R3 (xyz) 笛卡尔空间中的不等式系统解

我来这里是想问一下是否有 TikZ/pgf 支持将线性不等式系统产生的区域绘制到 xyz 笛卡尔空间中。我在以下网址找到了我对 xy 计划的需求示例如何使用 TikZ 绘制多边形,但我还需要绘制一些 3d 多胞形。

问题是坐标系,正如我在 pgfmanual.pdf 中发现的那样,它似乎不适合 R3:仅支持(,),但我需要类似(,,)的东西。

举个例子,我需要做这样的绘图:

http://dl.dropbox.com/u/9439473/share/polytope.png

但我还需要获得一个透明度为 50% 的彩色表面。

生成该多面体的系统非常简单,是一个线性规划问题:

x_1 + x_2 + x_3 <= 4
x_1 <= 2
x_3 <= 3
3*x_2 + x_3 <= 6
x_1 >= 0
x_2 >= 0
x_3 >= 0

您能否给我提供一些可以帮助我的 url/文章/文档,或者给我一些示例来指导我学习如何达到我的目标?

感谢您的关注

答案1

只是为了完整性。原则上与阿尔特蒙杜斯,但tikz-3dplot

\documentclass{minimal}
\usepackage{tikz}
\usepackage{tikz-3dplot}

\tdplotsetmaincoords{70}{120}

\begin{document}
  \begin{tikzpicture}[%
    tdplot_main_coords,
    scale=2,
    >=stealth
  ]   
    \draw[ultra thick,->] (0,0,0) -- (1,0,0);
    \draw[ultra thick,->] (0,0,0) -- (0,1,0);
    \draw[ultra thick,->] (0,0,0) -- (0,0,1);    
    \draw[fill=gray,opacity=0.5] (0,0,0) -- (0,2,0) -- (2,2,0) -- (2,0,0) -- cycle;
    \draw[fill=red,opacity=0.5] (0,2,0) -- (2,2,0) -- (0,1,3) -- cycle;
    \draw[fill=orange,opacity=0.5] (2,2,0) -- (2,0,2) -- (1,0,3) -- (0,1,3) -- cycle;
    \draw[fill=yellow,opacity=0.5] (2,2,0) -- (2,0,0) -- (2,0,2) -- cycle;
    \draw[fill=blue,opacity=0.5] (0,1,3) -- (1,0,3) -- (0,0,3) -- cycle;      
  \end{tikzpicture}     
\end{document}

在此处输入图片描述

答案2

无需 pgfplots 即可直接绘制(但这个包非常有用),但我认为实际上没有包可以使用不等式的数学表达式直接绘制多面体。关于 使用 TikZ 绘制飞机 并且没有用于等式的包,因此也没有用于不等式的包!我认为您需要拿一张纸和一支笔来做一些微积分,或者您可以看看 Asymptote。

\documentclass{article}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[x  = {(-0.5cm,-0.5cm)},
                    y  = {(0.9659cm,-0.25882cm)},
                    z  = {(0cm,1cm)},
                    scale = 2]   
\draw[ultra thick,->] (0,0,0) -- (1,0,0);
\draw[ultra thick,->] (0,0,0) -- (0,1,0);
\draw[ultra thick,->] (0,0,0) -- (0,0,1);    
\draw[fill=blue,opacity=0.5] (0,0,0)-- (0,2,0)-- (2,2,0) --(2,0,0)--cycle;
\draw[fill=red,opacity=0.5] (0,2,0)-- (2,2,0)-- (0,1,3)-- cycle;
\draw[fill=orange,opacity=0.5] (2,2,0) --(2,0,2) --(1,0,3)--(0,1,3) --cycle;
\draw[fill=yellow,opacity=0.5] (2,2,0) --(2,0,0) --(2,0,2)-- cycle;
\draw[fill=green,opacity=0.5] (0,1,3)-- (1,0,3)-- (0,0,3)-- cycle;      
\end{tikzpicture}     

\end{document} 

在此处输入图片描述

答案3

也许这对你的目的有用。基本上我在 pgfplots 中画出了多边形的面

\documentclass{article}

\usepackage{pgfplots}

\begin{document}
 \begin{tikzpicture}
  \begin{axis}[view={105}{30}]
\addplot3[fill=blue,opacity=0.5] coordinates{(0,0,0) (0,2,0) (2,2,0) (2,0,0)
(0,0,0)};
   \addplot3[fill=red,opacity=0.5] coordinates {(0,2,0) (2,2,0)
(0,1,3) (0,2,0)};
\addplot3[fill=orange,opacity=0.5] coordinates {(2,2,0) (2,0,2) (1,0,3)
(0,1,3) (2,2,0)};
\addplot3[fill=yellow,opacity=0.5] coordinates {(2,2,0) (2,0,0) (2,0,2)
(2,2,0)};
\addplot3[fill=green,opacity=0.5] coordinates {(0,1,3) (1,0,3) (0,0,3) (0,1,3)};
  \end{axis}

 \end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容