公告:网站程序已升级到1.8.3,修复了提问时可能报错的问题,请清除浏览器缓存
2019-11-10

欢迎来到 Mathematica 问答社区

提问时请贴上文本代码

语法高亮:在编辑器中点击

被禁止的话题:广告破解

请阅读:《提问的智慧》

备用域名:mma.ooo

支持LaTex数学公式
行内公式标识符:\$ 或“$\backslash ($”+“$\backslash )$”,
行间公式标识符:\$\$ 或 “$\backslash [$”+“$\backslash ]$”

社区建议QQ群:365716997

分类

0 投票
347 浏览
RegionPlot3D[
 x + z > -8.3 && y + z > -6.29 && x + z < -6.42 && 
  y + z < -3.53, {x, -10, 0}, {y, -10, 0}, {z, -10, 0}]

本人最近用RegionPlot3D绘制不等式数组图,形成的是个柱状体,但是想给每个面都涂上不同的颜色,试了很久都没有办法,因为希望能更清晰的看出四个面的差异。不知道有没有大神可以指点一二,跪谢!

 

分类:绘图 | 用户: eniffesun (11 分)

2 个回答

+1 投票
SetOptions[ContourPlot3D, Boxed -> False, Axes -> False, 
  Lighting -> Automatic, BoundaryStyle -> None, 
  Mesh -> {{0}, {0}, {0}}];
f1 = x + z + 8.3;
f2 = y + z + 6.29;
f3 = x + z + 6.42;
f4 = y + z + 3.53;
pureFun[f_] := (Evaluate[
     f /. {x -> Slot@1, y -> Slot@2, z -> Slot@3}]) &;
s1 = ContourPlot3D[f1 == 0, {x, -10, 2}, {y, -10, 0}, {z, -10, 0}, 
   MeshFunctions -> pureFun /@ {f2, f3, f4}, 
   MeshShading -> {{{None, Pink}, {None, None}}, {{None, None}, {None,
        None}}}, MeshStyle -> None];
s2 = ContourPlot3D[f2 == 0, {x, -10, 2}, {y, -10, 0}, {z, -10, 0}, 
   MeshFunctions -> pureFun /@ {f1, f3, f4}, 
   MeshShading -> {{{None, LightGreen}, {None, None}}, {{None, 
       None}, {None, None}}}, MeshStyle -> None];
s3 = ContourPlot3D[f3 == 0, {x, -10, 2}, {y, -10, 0}, {z, -10, 0}, 
   MeshFunctions -> pureFun /@ {f1, f2, f4}, 
   MeshShading -> {{{None, None}, {None, Cyan}}, {{None, None}, {None,
        None}}}, MeshStyle -> None];
s4 = ContourPlot3D[f4 == 0, {x, -10, 2}, {y, -10, 0}, {z, -10, 0}, 
   MeshFunctions -> pureFun /@ {f1, f2, f3}, 
   MeshShading -> {{{None, None}, {None, Yellow}}, {{None, 
       None}, {None, None}}}, MeshStyle -> None];
Show[s1, s2, s3, s4, PlotRange -> All, ImageSize -> Large, 
 ViewPoint -> {1.9, 1.3, 2.4}]

其中 MashShading 的选取是通过二叉树,往后写一个清晰的函数把这部分表达出来。这种画法效果最好,比起用 ContourPlot3D+RegionFunction 都要好。

用户: cvgmt (276 分)
修改于 用户:cvgmt
0 投票
对于函数RegionPlot3D来说,每面涂上不同的颜色有点难啊。

看不清楚各面,主要是绘图不够精细。把PlotPoints设置高些就好多了。

RegionPlot3D[ x + z > -8.3 && y + z > -6.29 && x + z < -6.42 && y + z < -3.53, {x, -10, 0}, {y, -10, 0}, {z, -10, 0}, PlotPoints -> 100, Mesh -> None]

对于高品质的绘图建议使用Graphics3D,下面是根据你给的例子画的:

Clear["Global`*"]; e = {x + z == -8.3, y + z == -6.29, x + z == -6.42, y + z == -3.53, y == 0, z == 0};(*你给的方程*) p = Select[ Flatten[{x, y, z} /. Select[Solve[#, {x, y, z}] & /@ Subsets[e, {3}], # != {} &], 1], # != {_, 0, 0} &];(*可能的顶点坐标*) f = Subsets[p, {4}];(*所以可能的平面*) ff = Select[f, Or @@ (And @@@ Transpose[(e /. {x -> #[[1]], y -> #[[2]], z -> #[[3]]}) & /@ #]) &];(*满足条件的平面*) c[list_] := RegionMeasure[Line[PadRight[list, 5, {list[[1]]}]]](*周长*) polygon4[list_] := Module[{pe = Permutations[list]}, Polygon[pe[[First[Ordering[c /@ pe]]]]]](*重新排列4边形顶点*) Graphics3D[ Riffle[RandomColor[Length[ff]], polygon4 /@ ff]](*绘图,使用了随机颜色*)
用户: 野鹤 (4.8k 分)
十分谢谢,等我试验一下!
...