首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从已知的斜率和方面值生成2D数组?

如何从已知的斜率和方面值生成2D数组?
EN

Stack Overflow用户
提问于 2022-04-05 13:00:06
回答 1查看 260关注 0票数 1

给定存储为Numpy数组的虚拟高度图(或数字高程模型),如下所示:

代码语言:javascript
运行
复制
import numpy as np
import matplotlib.pyplot as plt

line = np.flip(np.arange(0, 10))
dem = np.tile(line, (10, 1))

我可以这样计算它的坡度和坡度:

代码语言:javascript
运行
复制
x, y = np.gradient(dem)
slope = np.degrees(np.arctan(np.sqrt(x**2 + y**2)))
aspect = np.degrees(np.arctan2(x, -y))

并把它想象成:

代码语言:javascript
运行
复制
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
y, x = np.mgrid[:10, :10]
ax.scatter(x, y, dem)
ax.set_title(f"Slope={np.mean(slope)}, Aspect={np.mean(aspect)}")

但我该怎么做呢?

我想要生成一个固定大小的空白2D Numpy数组,然后用一个已知的斜率和角度(从任意海拔开始,例如0)填充它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 13:29:16

由于gradient的步长为1,所以用N点和给定的slopeoffset绘制直线的一般公式是

代码语言:javascript
运行
复制
slope * np.arange(N) + offset

你所说的斜率是坡度的大小,作为一个角度。你所称的斜率是x方向和y方向的部分斜率,也是一个角度。你有以下非线性方程组:

代码语言:javascript
运行
复制
np.tan(np.radians(slope))**2 = sx**2 + sy**2
np.tan(np.radians(aspect)) = -sx / sy

幸运的是,您可以很容易地使用替换来解决这个问题:

代码语言:javascript
运行
复制
p = np.tan(np.radians(slope))**2
q = np.tan(np.radians(aspect))
sy = np.sqrt(p / (q**2 + 1))
sx = -q * sy

现在,您所需要做的就是取两行斜率sxsy的外和。

代码语言:javascript
运行
复制
dem = offset + sx * np.arange(NX)[::-1, None] + sy * np.arange(NY)

下面是一个示例:

投入:

代码语言:javascript
运行
复制
aspect = -30
slope = 45
offset = 1
NX = 12
NY = 15

梯度:

代码语言:javascript
运行
复制
p = np.tan(np.radians(slope))**2
q = np.tan(np.radians(aspect))
sy = np.sqrt(p / (q**2 + 1))   # np.sqrt(3) / 2
sx = -q * sy                   # 0.5

结果:

代码语言:javascript
运行
复制
dem = offset + sx * np.arange(NX)[::-1, None] + sy * np.arange(NY)
fig, ax = plt.subplots(subplot_kw={'projection': '3d'})
ax = fig.add_subplot(111, projection="3d")
ax.scatter(*np.mgrid[:NX, :NY], dem)

您的约定可能会被一个标志所忽略,您应该能够通过查看情节来轻松地解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71752250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档