如何使用等式 python 创建 heat\grid\colored 地图?

How to create a heat\grid\colored map using a equation python?

我想使用方程式创建彩色地图,例如声音传播。基本上我想把源放在地图的中间(或任何地方)并预测强度如何随着与源的距离而降低。

import math
import numpy as np
import matplotlib.pyplot as plt

# mesh
x = np.linspace(-4, 4, 10)
y = np.linspace(-5, 5, 10)
X,Y = np.meshgrid(x,y)

# center point
p = [0,0]

# Distance
R = np.sqrt((((p[0]-X)**2)+((p[1]-Y)**2)))

# Equation
z = [np.round(10 * np.log10((((((R/(1000**(1/3)))**-1.45) * 516)/(20**(-3)))**2)),0) for R in range(1,101) ]

# Ploting
Z= np.array(z).reshape(len(y),len(x))

plt.pcolormesh(X,Y,Z)
plt.colorbar()

plt.show()

我有以下问题:

  1. 来源不在中心
  2. 看来投影还是一个方向,应该是各个方向
  3. 距离是错误的,因为应该只有 8 米(-4 到 4),但在带扣中我不得不输入范围 (1, 101) 并且强度是以 100 米计算的!我这样做是因为重塑函数需要相同的大小 (10x10)。

到目前为止,这是我的输出:

我想做类似的事情:

有什么想法吗?

您没有在 z 中使用 R;尝试

import numpy as np
import matplotlib.pyplot as plt

# mesh
x = np.linspace(-4, 4, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)

# center point
p = [0, 0]

# Distance
R = np.sqrt((p[0] - X) ** 2 + (p[1] - Y) ** 2)

# Equation
z = np.round(
    10 * np.log10(((((R / (1000 ** (1 / 3))) ** -1.45) * 516) / (20 ** (-3))) ** 2),
    0,
)

# Ploting
Z = np.array(z).reshape(len(y), len(x))

plt.pcolormesh(X, Y, Z)
plt.colorbar()

plt.show()