我正在尝试将一系列平面绘制为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
答案 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}]]]}]]
它的作用是绘制顶部和底部表面,然后构造四个多边形,每个多边形沿着一侧连接顶部和底部表面。但需要注意的是,如果你仔细观察,你会看到,因为它们是多边形,四个面的边缘由短线段而不是抛物线构成,因此不能完美地连接两个抛物线,可能会很小间隙或微小的重叠。这可能会也可能不会对您的申请产生任何影响。
该图形在机器上只需几分之一秒即可显示。
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]
这远不及Bills&#39;方法,但如果您绘制更复杂的区域可能会有用。注意RegionPlot
对原始示例不起作用,因为与绘图范围相比,音量太小。