将一系列平面绘制为Mathematica中的实体对象

时间:2014-05-17 14:53:23

标签: optimization graphics wolfram-mathematica fill

我正在尝试将一系列平面绘制为mathematica中的实体对象。我首先尝试使用RangePlot3D选项以及填充选项来绘制3D体积图,但无法找到工作结果。

我想要创建的图形将显示z轴和距离3D长方体原点的半径之间的偏差。我正在使用的当前等式是:

Plot3D[Evaluate[{Sqrt[(C[1])^2 + x^2 + y^2]} /. 
C[1] -> Range[6378100, 6379120]], {x, -1000000, 
1000000}, {y, -1000000, 1000000}, AxesLabel -> Automatic]

(更易于管理的范围的输出如下所示)

其中C 1是每个平面的原始Z值,该方程的结果是z +(r-z) 对于x,y平面上的任何点。

然而,这种方法非常低效。因为这将用于模拟原始z值>> 6,000,000且高度超过1000的大对象,mathematica无法绘制数千个平面并以响应方法表示它们。

此外,由于C 1的范围仅包括整数值,因此这些平面之间存在不连续性。

有没有办法使用不同的mathematica功能重写它,这将生成一个3Dplot,它既是我系统上的合理负载又是一个平滑的对象?

第二,我该怎么做才能提高我的性能?当计算上述输入> 30分钟时,mathematica只使用了大约30%的CPU和4GB的RAM,同时我的显卡也有轻负载。这只是Chrome现在在我的系统上使用的两倍。

我尝试启用CUDALink,但无法正常启用。这会为这种类型的处理提供性能提升吗?

参考,我的系统构建是: 16GB拉姆 英特尔i7 4770K在库存设置下运行 Nvidia GeForce 760GTX 256三星SSD

2 个答案:

答案 0 :(得分:1)

绘制一百万个飞机并希望它变成一个3d固体似乎不太可能成功。

也许你可以适应这样的事情

Show[Plot3D[{Sqrt[6^2+x^2+y^2], Sqrt[20^2+x^2+y^2]}, {x, -10, 10}, {y, -10, 10},
   AxesLabel -> Automatic, PlotRange -> {{-15, 15}, {-15, 15}, All}], 
  Graphics3D[{
   Polygon[Join[
    Table[{x, -10, Sqrt[6^2 + x^2 + (-10)^2]}, {x, -10, 10, 1}], 
    Table[{x, -10, Sqrt[20^2 + x^2 + (-10)^2]}, {x, 10, -10, -1}]]], 
   Polygon[Join[
    Table[{-10, y, Sqrt[6^2 + (-10)^2 + y^2]}, {y, -10, 10, 1}], 
    Table[{-10, y, Sqrt[20^2 + (-10)^2 + y^2]}, {y, 10, -10, -1}]]], 
   Polygon[Join[
    Table[{x, 10, Sqrt[6^2 + x^2 + 10^2]}, {x, -10, 10, 1}], 
    Table[{x, 10, Sqrt[20^2 + x^2 + 10^2]}, {x, 10, -10, -1}]]], 
   Polygon[Join[
    Table[{10, y, Sqrt[6^2 + 10^2 + y^2]}, {y, -10, 10, 1}], 
    Table[{10, y, Sqrt[20^2 + 10^2 + y^2]}, {y, 10, -10, -1}]]]}]]

enter image description here

它的作用是绘制顶部和底部表面,然后构造四个多边形,每个多边形沿着一侧连接顶部和底部表面。但需要注意的是,如果你仔细观察,你会看到,因为它们是多边形,四个面的边缘由短线段而不是抛物线构成,因此不能完美地连接两个抛物线,可能会很小间隙或微小的重叠。这可能会也可能不会对您的申请产生任何影响。

该图形在机器上只需几分之一秒即可显示。

Mathematica不会自动将计算并行化到多个核心。 与打开链接相比,CUDA编程是一个相当大的挑战。 如果您可以简单地定义实体的每个面并将它们与Show结合使用 我认为你将有更大的成功机会。

答案 1 :(得分:0)

另一种方式:

 xyrange = 10
 cmin  = 6
 cmax = 20
 RegionPlot3D[
    Abs[x] < xyrange && Abs[y] < xyrange && 
     cmin^2  <  z^2 - ( x^2 + y^2) < cmax^2  ,
     {x, -1.2 xyrange,  1.2 xyrange}, {y, -1.2 xyrange, 1.2 xyrange},
     {z, cmin,  Sqrt[ cmax^2 + 2 xyrange^2]}, MaxRecursion -> 15, 
             PlotPoints -> 100]

enter image description here

这远不及Bills&#39;方法,但如果您绘制更复杂的区域可能会有用。注意RegionPlot对原始示例不起作用,因为与绘图范围相比,音量太小。