3

这个问题可能看起来有点奇怪,但对我来说并不是那么疯狂。这很容易,但我需要你跟着我。

目的

我的目标是绘制三维图。

问题

问题是我手中的材料开始构建这个图表。实际上,我在 2D 空间中有一组点(因此是两个实数有序值的元组)。考虑将这些点的集合存储到一个数组中,现在考虑将它们绘制在 2D 图表上。您将对这些点有一个很好的稀疏视图。

好吧,第二步是这样的:考虑具有这些点的表面,并创建与绘制这些点的平面正交的第三个轴。目的是为每个点分配一个数值标量值(使用一个接受对并返回数值的函数)。因此,图表应显示从每个点开始的条形图,并根据分配函数具有特定值。

如何在 Mathematica 中实现这一点?

一个小笔记

基本上我在二维空间中的点也通过图表连接起来。是否可以将条形的顶部连接到其基点在二维图中连接在一起的其他条形的顶部?

其他一些注意事项

我的图表不必是一个表面,而只是一组放置在平面上的条形图,它们所指的对应点所在的确切位置。但是,如果您对如何绘制条形以外的表面有很好的提示,我们会​​很高兴地接受它。

我希望我很清楚。我想指出我有 Mathematica 8,所以所有功能都可用。谢谢你。

4

1 回答 1

6

这可以使用Graphics3D原语来完成。让我们从一些数据开始

(* a list of 2D coordinates *)
points2D = RandomReal[{0, Pi}, {50, 2}];

(* some edges as a list of pairs of vertex indices *)
edges = Union[Flatten[MapIndexed[Sort /@ Thread[{#2[[1]], 
     Nearest[points2D -> Automatic, #, 4]}] &, points2D], 1]];

(* constructing list of 3D coordinates *)
f[{x_, y_}] := 2 + Sin[x y]
points3D = {##, f[{##}]} & @@@ points2D;

然后可以按如下方式构造实际图(宽度是条形宽度的一半)

With[{width = .02},
  Graphics3D[{{LightBlue, EdgeForm[None],
    Cuboid[{#1, #2, 0} - width {1, 1, 0}, {##} + width {1, 1, 0}] & @@@ points3D},
   {Orange,
    GraphicsComplex[points3D, Line[edges]]}}, 
  Lighting -> "Neutral", 
  BoxRatios -> {1, 1, .6}]]

数学图形

于 2012-01-24T10:08:37.743 回答