Mathematica RegionPlot on the surface of the unit sphere?
我在 Mathematica 中使用
如果需要,我非常乐意提供一些 Mathematica 代码;虽然我相信答案应该独立于我试图绘制的区域的细节。
提前致谢!
更新:如果有人感兴趣,我最近完成了一篇论文,我在下面使用 Sasha 的答案来制作一些情节。这篇论文是对称 M 理论背景,上周发表。它包含如下图:
再次感谢!
请查看
中逐字使用您的不等式
1 2 3 4 5 6 | Show[{ParametricPlot3D[{Sin[th] Cos[ph], Sin[th] Sin[ph], Cos[th]}, {th, 0, Pi}, {ph, 0, 2 Pi}, RegionFunction -> Function[{x, y, z}, And[x^3 < x y z + z^3, y^2 z < y^3 + x z^2]], PlotRange -> {-1, 1}, PlotStyle -> Red], Graphics3D[{Opacity[0.2], Sphere[]}]}] |
这是我能想到的最简单的想法(感谢 belisarius 提供的一些代码)。
- 使用球坐标(使用 ??=q, ??=f)将不等式投影到球体上。
- 将它们绘制为平坦区域图。
- 然后将其绘制为球体的纹理。
这里有几个 3 阶齐次不等式
1 2 3 4 5 6 | ineq = {x^3 < x y^2, y^2 z > x z^2}; coords = {x -> r Sin[q] Cos[f], y -> r Sin[q] Sin[f], z -> r Cos[q]}/.r -> 1 region = RegionPlot[ineq /. coords, {q, 0, Pi}, {f, 0, 2 Pi}, Frame -> None, ImagePadding -> 0, PlotRangePadding -> 0, ImageMargins -> 0] |
1 2 3 | ParametricPlot3D[coords[[All, 2]], {q, 0, Pi}, {f, 0, 2 Pi}, Mesh -> None, TextureCoordinateFunction -> ({#4, 1 - #5} &), PlotStyle -> Texture[Show[region, ImageSize -> 1000]]] |
Simon 击败了我,但这里有一个类似的想法,基于较低级别的图形。我处理形式为 Ax>0.
的线性齐次不等式
1 2 3 4 5 6 7 8 9 10 11 | A = RandomReal[{0, 1}, {8, 3}]; eqs = And @@ Thread[ A.{Sin[phi] Cos[th], Sin[phi] Sin[th], Cos[phi]} > Table[0, {Length[A]}]]; twoDPic = RegionPlot[eqs, {phi, 0, Pi}, {th, 0, 2 Pi}]; pts2D = twoDPic[[1, 1]]; spherePt[{phi_, th_}] := {Sin[phi] Cos[th], Sin[phi] Sin[th], Cos[phi]}; rpSphere = Graphics3D[GraphicsComplex[spherePt /@ pts2D, twoDPic[[1, 2]]]] |
让我们将它与
进行比较
1 2 3 4 5 | rp3D = RegionPlot3D[And @@ Thread[A.{x, y, z} > Table[0, {Length[A]}]], {x, -2, 2}, {y, -2, 2}, {z, -2, 2}, PlotStyle -> Opacity[0.2]]; Show[{rp3D, rpSphere}, PlotRange -> 1.4] |
1 2 3 4 5 | SphericalPlot3D[0.6, {\\[Phi], 0, \\[Pi]}, {\\[Theta], 0, 2 \\[Pi]}, RegionFunction -> Function[{x, y, z}, PolyhedronData["Cube","RegionFunction"][x, y, z]], Mesh -> False, PlotStyle -> {Orange, Opacity[0.9]}] |