使用Mathematica中的Graphics显示3D中的多个2D图?

时间:2011-06-26 21:37:53

标签: graphics 3d wolfram-mathematica

考虑以下因素:

lalist = {{{{1, 1}, 1}, {{3, 3}, 1}, {{5, 5}, 1}},
          {{{1, 5}, 1}, {{3, 3}, 1}, {{5, 1}, 1}}}

enter image description here

Row[{
  Graphics[{
            Opacity[0.5],Red, 
            Disk @@@ lalist[[1]]}, 
            Frame -> True],
  Graphics[{
            Opacity[0.5],Blue, 
            Disk @@@ lalist[[2]]}, 
            Frame -> True]}
    ]

enter image description here

  • 我是否有可能策划蓝调 磁盘“落后于”3D中的红色磁盘 情节?

以下不是我需要的:

enter image description here

3 个答案:

答案 0 :(得分:10)

喜欢这个吗?

Graphics3D[{{Texture[
 Graphics[{Opacity[0.5], Blue, Disk @@@ lalist[[2]]}, 
  Frame -> True]], 
 Polygon[{{-1, -1, -1}, {1, -1, -1}, {1, 1, -1}, {-1, 1, -1}}, 
 VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
    1}}]}, {Texture[
 Graphics[{Opacity[0.5], Red, Disk @@@ lalist[[1]]}, 
  Frame -> True]], 
Polygon[{{-1, -1, 1}, {1, -1, 1}, {1, 1, 1}, {-1, 1, 1}}, 
 VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
    1}}]}}, Lighting \[Rule] "Neutral"]

enter image description here

很多不透明.2:

tab = Table[{Opacity \[Rule] .2, 
Texture[Graphics[{Opacity[0.5], Blue, Disk @@@ lalist[[2]]}, 
  Frame -> True]], 
Polygon[{{-1, -1, z}, {1, -1, z}, {1, 1, z}, {-1, 1, z}}, 
 VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
    1}}]}, {z, -2, 2, 1}];
plt = Graphics3D[{tab}, Lighting \[Rule] "Neutral"]

enter image description here

和400在速度方面似乎没有太大问题(您可以轻松修改上面的代码以查看它)。

编辑:好的,只是傻了,试试这个

Dynamic[Graphics3D[{{Texture[#], 
  Polygon[{{-1, -1, -1}, {1, -1, -1}, {1, 1, -1}, {-1, 1, -1}}, 
   VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
      1}}]}, {Texture[Rotate[#, \[Pi]/2]], 
  Polygon[{{-1, -1, 1}, {1, -1, 1}, {1, 1, 1}, {-1, 1, 1}}, 
   VertexTextureCoordinates \[Rule] {{0, 0}, {1, 0}, {1, 1}, {0, 
      1}}]}}, Lighting \[Rule] "Neutral"] &@Binarize[CurrentImage[]]]

给出了

enter image description here

(或类似的东西),可旋转,实时更新等。

答案 1 :(得分:9)

请参阅“午餐时间游乐场:Mathematica的乐趣”中提供的解决方案:http://mathgis.blogspot.com/2009/02/howto-display-2d-plot-in-3d.html

答案 2 :(得分:4)

使用透明纹理在图层as ACL does中渲染这些圆圈是一个很好的解决方案,除非有人想要与生成的3D对象进行交互。 Rendering of 3D objects that contain transparent elements is done in software whereas otherwise it would have been done in hardware

  

3D渲染器使用两种不同的渲染器   排序多边形的方法。对于   图形场景,包括没有   透明度,硬件加速   使用深度缓冲区。否则,   渲染器使用二进制空间分区   从中分割和排序多边形的树   任何观点。 BSP树速度较慢   创造而不是硬件   加速,但它提供了最多   一般支持多边形的能力。

在我的笔记本电脑上,只要透明物体开始出现,与3D图形的交互就会非常缓慢。

解决方案是使用3D磁盘而不是半透明平面,其中包含2D磁盘。由于MMA没有3D DiskCircle s,如果你想做类似的事情,你必须自己动手。一个简单的版本就像是:

myDisk[{x_, y_, z_}, r_] := 
 Polygon@Table[
               {x, y, z} + r {Cos[\[Phi]], Sin[\[Phi]], 0} // N,
               {\[Phi], 0, 2 \[Pi], 2 \[Pi]/200}
              ]

然后您的图层将按如下方式生成:

Graphics3D[
 {
   EdgeForm[],
  {
   Red, 
   myDisk[{1, 1, 0.5}, 0.5],  
   myDisk[{0, 0, 0.5}, 0.5],   
   myDisk[{-1, -1, 0.5}, 0.5]
  },
  {
   Blue,  
   myDisk[{1, -1, -0.5}, 0.5],
   myDisk[{0, 0, -0.5}, -0.5], 
   myDisk[{-1, 1, -0.5}, 0.5]}
  }
 ]

enter image description here