gpt4 book ai didi

graphics - 填充 Graphics3D 对象

转载 作者:行者123 更新时间:2023-12-02 05:09:50 25 4
gpt4 key购买 nike

这里有一个问题,我不知道是否可以在 Mathematica 中解决。

(* Courtesy to Lunchtime Playground Blog *)
to3d[plot_, height_, opacity_] :=
Module[{newplot}, newplot = First@Graphics[plot];
newplot = N@newplot /. {x_?AtomQ, y_?AtomQ} -> {x, y, height} /.
Arrowheads[List[List[x_, y_, notz_]]] ->
Arrowheads[List[List[x, y]]];newplot /.GraphicsComplex[xx__] -> {Opacity[opacity], GraphicsComplex[xx]}];
(* A function to combine 2D Graphics object in Mathematica *)
test[list_]:=VectorQ[list,SameQ[Head[#],Graphics]&];
My3DPlot[list_?(test[#]&),height_?(VectorQ[#,NumberQ]&),opacity_?(VectorQ[#,NumberQ]&),opts:OptionsPattern[]]:=Block[{a},a=MapThread[Graphics3D[to3d[#1,#2,#3]]&,{list,height,opacity}];
Show[a,opts]
]
(* List of 2D graphics *)
list=Table[ContourPlot[y+Sin[x^i+i y],{x,-3,3},{y,-3,3},Contours->15,ContourLines->False,ColorFunction->RandomChoice[ColorData["Gradients"]]],{i,{1,2,3,4}}];
(* List of heights where you want to place the images *)
height={-.5,0,.5,1};
(* List of opacities you want to apply to your 2D layers *)
opacity={1,.8,.7,.5};
(* The function inherits all the options of standard Graphics3D as they are passed through the Show command *)
My3DPlot[Reverse@list,height,opacity,Lighting->"Neutral",BoxRatios->{1,1,.9},Axes->True]

现在这会返回一张像这样的很酷的图片。 enter image description here

我的问题是,是否可以使用与等高线图中使用的颜色函数相同的颜色函数为此 2D 图层创建填充?目标是用一些颜色填充这些二维层之间的空洞,这些颜色会根据相邻层的颜色函数不断变化。

我希望这可以在 Mathematica 中完成,但我对 Mathematica 图形的了解有限,这对我来说是一个困难的障碍。

最佳答案

应该是可以的。 Texture 可用于生成 3D 纹理。文档中给出的示例:

data = Table[{r, g, b}, {r, 0, 1, 1/20}, {g, 0, 1, 1/20}, {b, 0, 1, 1/20}];

Graphics3D[
{
Opacity[1/3],
Texture[data],
EdgeForm[],
Polygon[Table[{{0, 0, z}, {1, 0, z}, {1, 1, z}, {0, 1, z}}, {z, 0, 1, 1/20}],
VertexTextureCoordinates ->
Table[{{0, 0, s}, {1, 0, s}, {1, 1, s}, {0, 1, s}}, {s, 0, 1, 1/20}]]
},
Lighting -> "Neutral"
]

enter image description here

这通过使用大量平面来模拟体积。你也可以做到的。您所要做的就是描述 3D 纹理,它应该在您已有的平面之间进行插值。Blend 将是此处要使用的函数。对于立方体中的每个像素列,颜色变化为 Blend[{col1,col2,col3,...},x] ,其中 x 从 0 到 1,coli 中像素的颜色等高线图给出的第 i 个平面。

主要问题是,具有模糊颜色渐变的 3D 半透明对象的视觉效果不是很好。

关于graphics - 填充 Graphics3D 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6855231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com