3Dgraph的线框图像 - 可以导出

时间:2011-10-13 20:37:24

标签: image 3d wolfram-mathematica

使用mathematica制作的线框图可以变成透明图像然后导出到另一个网站吗? 这个问题的原因是我试图将线框适合结构。

2 个答案:

答案 0 :(得分:2)

以下代码允许以透明背景导出到GIF(基于Mr.Wizard的代码):

g = Plot3D[{x^2 + y^2, -x^2 - y^2}, {x, -2, 2}, {y, -2, 2}, 
  RegionFunction -> Function[{x, y, z}, x^2 + y^2 <= 4], 
  BoxRatios -> Automatic, PlotStyle -> None, Axes -> None, 
  Boxed -> False]

Export["wireframetest.gif", g, Background -> White, 
 "TransparentColor" -> White]

以下是它在Windows XP的标准“Windows Picture and Fax Viewer”中的显示方式:

screenshot

请注意,在这种情况下,您必须指定Graphics3D的背景(默认为White)以及导出到GIF时将转换为透明色的颜色。因此,当目标图像应包含不透明的白色像素时,应该注意:Export不仅要完全忽略原始图像的alpha通道,还要考虑相等的RGB值,这些值相差不到1 / 256.4971(在32位Windows XP上使用 Mathematica 8.0.1检查):

Rasterize[Graphics[{RGBColor[0, 0, 0], Disk[]}]] === 
 Rasterize[Graphics[{RGBColor[0, 0, 1/256.4971], Disk[]}]]
(*=> True*)

处理这种情况的一种方法是为背景指定一种非标准颜色,这种颜色不会出现在图形的渲染版本中:

Export["wireframetest.gif", g, 
 Background -> RGBColor[1, 1, 0.996], 
 "TransparentColor" -> RGBColor[1, 1, 0.996]]

这种方法可以自动化。首先,我们可以获得出现在图像渲染版本中的所有颜色:

neededColors = Union[Flatten[Rasterize[g, "Data"], 1]]

在第二步,我们应该选择一个未出现在此列表中的颜色(以下是一个快速而肮脏的解决方案):

colorForBackground = 
 RGBColor @@ (First@
     Complement[Permutations[Range[0, 255], {3}], neededColors]/255)

现在我们可以按如下方式使用它:

Export["wireframetest.gif", g, Background -> colorForBackground, 
 "TransparentColor" -> colorForBackground]

答案 1 :(得分:1)

我不确定我理解你的要求,但这可能就足够了。

关键位是PlotStyle -> NoneBackground -> None

g = Plot3D[{x^2 + y^2, -x^2 - y^2}, {x, -2, 2}, {y, -2, 2}, 
  RegionFunction -> Function[{x, y, z}, x^2 + y^2 <= 4], 
  BoxRatios -> Automatic, PlotStyle -> None, Axes -> None, Boxed -> False]

Export["wireframetest.png", g, Background -> None]

enter image description here

您也可以导出为GIF,但这实际上并不会将背景显示为透明。您必须在图形编辑器中将白色背景设置为透明色。 (这是在Mac OS X上测试的。)