【问题标题】:How to create a 3D surface from given coordinates with python?如何使用 python 从给定坐标创建 3D 表面?
【发布时间】:2018-09-24 06:55:47
【问题描述】:

我有一些带有高度的离散坐标,我需要创建一个光滑的表面,我将继续使用它。我需要该表面中所有坐标的高度。我正在考虑使用 3D 样条,但在应用类似问题中建议的方法时遇到了麻烦。我不是一个经验丰富的程序员,所以我可能会发现任何有用的建议。如果我可能会问一些与之前已经讨论过的内容非常相似的问题,请原谅我。我正在使用 Python 3.6。

编辑

我做了一个小清单(类似于我的清单)。

Z=[]
Z.append([20.2, 20.1, 35])
Z.append([20.1, 24.5, 36])
Z.append([21.0, 23.2, 33])
Z.append([22.3, 20.0, 34])
Z.append([22.3, 19.5, 28])
Z.append([20.1, 19.5, 27])
Z.append([20.1, 24.6, 31])
Z.append([22.3, 24.6, 32])

这里的第一个数字代表经度,第二个代表纬度,第三个代表海拔。我需要制作一个“表面”(不一定要绘制它),其中包含有关此矩形之间所有坐标的信息。

我认为这听起来可能不清楚,但问题可能在于我不知道我正在寻找的数据的确切结构或类型。

【问题讨论】:

  • 请看这里:How to Ask
  • 我改变了问题(如果那是问题)。谢谢指正。
  • 请提供一些示例、输入、输出,只是文本也对我们没有帮助

标签: python 3d interpolation spline


【解决方案1】:

一种可能性是使用来自 scipy 的方法 griddata

以下是如何对数据使用最近邻插值法的小示例:

import numpy as np
from scipy.interpolate import griddata
# --------------------
Z=[]
Z.append([20.2, 20.1, 35])
Z.append([20.1, 24.5, 36])
Z.append([21.0, 23.2, 33])
Z.append([22.3, 20.0, 34])
Z.append([22.3, 19.5, 28])
Z.append([20.1, 19.5, 27])
Z.append([20.1, 24.6, 31])
Z.append([22.3, 24.6, 32])
# ---------------------------
xin=np.array(Z)[:,0];
yin=np.array(Z)[:,1];
zin=np.array(Z)[:,2];
# ----------------------------
xout=np.linspace(20.,23.,10);
yout=np.linspace(19.,25.,10);
xout,yout = np.meshgrid(xout,yout);
# ----------------------------
zout=griddata((xin,yin),zin,(xout,yout),'nearest');
# -----------------------------
from pylab import pcolormesh,show
pcolormesh(xout,yout,zout);show();

【讨论】:

  • 感谢您的帮助。我还有一个问题:例如,我能否得到特定坐标经度 = 21.4 和纬度 = 22.5 的高度,我该怎么做?
  • 您应该找到坐标匹配或接近所需位置的索引:kkx=np.where(np.abs(xout-21.4)==np.abs(xout-21.4).min())kky=np.where(np.abs(yout-22.5)==np.abs(yout-22.5).min())。然后就可以轻松获取值了:zval = zout[kky,kkx]
猜你喜欢
  • 2016-04-08
  • 2016-05-25
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多