Изображение каркаса из 3Dgraph-можно ли его экспортировать - PullRequest
1 голос
/ 14 октября 2011

Можно ли превратить каркасный график, созданный с помощью mathematica, в прозрачное изображение и затем экспортировать на другой сайт?Причина этого вопроса в том, что я пытаюсь подогнать каркас к конструкции.

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

Следующий код позволяет экспортировать в 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 Picture and Fax Viewer» "Windows XP:

screenshot

Обратите внимание, что в этом случае вы должны указать как фон для Graphics3D (по умолчанию White), так и цветкоторый будет преобразован в прозрачный цвет при экспорте в GIF.Поэтому следует соблюдать осторожность в случае, когда целевое изображение должно содержать непрозрачные белые пиксели: Export не только полностью игнорирует альфа-канал исходного изображения, но также учитывает равные значения 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 голос
/ 14 октября 2011

Я не уверен, что понимаю ваши требования, но этого может быть достаточно.

Критические биты PlotStyle -> None и Background -> 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.)

...