Optimization 在Mathematica中将一系列平面作为实体绘制
我试图在mathematica中将一系列平面画成一个实体。我首先尝试使用RangePlot3D选项以及填充选项来绘制3D体积,但找不到工作结果 我试图创建的图形将显示z轴和半径与3D长方体原点之间的偏差。我现在使用的公式是:Optimization 在Mathematica中将一系列平面作为实体绘制,optimization,graphics,wolfram-mathematica,fill,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}, Ax
Plot3D[Evaluate[{Sqrt[(C[1])^2 + x^2 + y^2]} /.
C[1] -> Range[6378100, 6379120]], {x, -1000000,
1000000}, {y, -1000000, 1000000}, AxesLabel -> Automatic]
(更易于管理的范围的输出如下所示)
式中,C是每个平面上的原始Z值,该方程的结果为Z+(r-Z)
对于x,y平面上的任意点
然而,这种方法效率极低。因为这将用于模拟原始z值大于6000000且高度高于1000的大型对象,mathematica无法绘制数千个平面的图形,并用响应方法表示它们
此外,由于C的范围仅包括整数值,因此这些平面之间存在不连续性
有没有一种方法可以使用不同的mathematica功能来重写它,从而生成一个3Dplot,该3Dplot在我的系统上既是一个合理的负载,也是一个平滑的对象
第二,我能做些什么来提高我的绩效?当计算上述输入>30分钟时,mathematica仅利用了大约30%的CPU和4GB的ram,图形卡上的负载也很轻。这仅仅是chrome目前在我的系统上使用量的两倍
我试图启用CUDALink,但无法正确启用。这会为这种类型的处理提供性能提升吗
作为参考,我的系统构建为:
16GB内存
英特尔i7 4770K以库存设置运行
英伟达GeForce 760GTX
256三星SSD绘制一百万个平面并希望成为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组合,那么
我认为你会有更大的成功机会。另一种方法:
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]
xyrange=10
cmin=6
cmax=20
区域绘图3D[
Abs[x]15,
绘图点->100]
这远没有比尔的方法快,但如果你画一个更复杂的区域,它可能会有用。注意RegionPlot
不适用于原始示例,因为体积与绘图范围相比太小