Mathematica RegionPlot在单位球体的表面上?

Jos*_*ill 12 plot wolfram-mathematica

RegionPlot3D在Mathematica中使用来想象一些不平等.由于不等式在坐标中是均匀的,它们由它们与单位球体的交点唯一确定.这给出了我想要绘制的球体表面上的一些二维区域.我的问题是怎么样?

如果需要,我会非常乐意提供一些Mathematica代码; 虽然我认为答案应该独立于我试图绘制的地区的细节.

提前致谢!

更新:如果有人有兴趣,我最近完成了一篇论文,其中我使用了Sasha的答案,以便制作一些情节.这篇论文是对称的M理论背景,上周已经开始了.它包含这样的图:

用于对称M-理论背景的F-模空间

再次感谢!

Sas*_*sha 13

请看看RegionFunction.你可以在里面逐字使用你的不等式ParametricPlot3D.

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[]}]}]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Sim*_*mon 12

这是我能提出的最简单的想法(感谢belisarius一些代码).

  • 使用球面坐标(θ= q,φ= f)将不等式投影到球体上.
  • 将它们绘制为平坦区域图.
  • 然后将其绘制为球体的纹理.

这是3阶的几个同质不等式

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]
Run Code Online (Sandbox Code Playgroud)

平坦的地区

ParametricPlot3D[coords[[All, 2]], {q, 0, Pi}, {f, 0, 2 Pi}, 
 Mesh -> None, TextureCoordinateFunction -> ({#4, 1 - #5} &), 
 PlotStyle -> Texture[Show[region, ImageSize -> 1000]]]
Run Code Online (Sandbox Code Playgroud)

动画


Mar*_*ure 5

西蒙打败了我,但这是一个类似的想法,基于较低级别的图形.我处理Ax> 0形式的线性,齐次不等式.

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]]]]
Run Code Online (Sandbox Code Playgroud)

让我们将它与a进行比较RegionPlot3D.

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]
Run Code Online (Sandbox Code Playgroud)