2.6(學號:3025)

唐锦珅發表於2024-10-27

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

模擬高程資料(假設資料已經過某種方式插值或生成)

這裡我們建立一個簡單的40x50網格,並填充隨機高程值

x = np.linspace(0, 43.65, 40)
y = np.linspace(0, 58.2, 50)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X2 + Y2)) * 100 # 使用一個簡單的函式來生成高程資料

繪製三維表面圖

fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(121, projection='3d')
ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
ax.set_xlabel('X (km)')
ax.set_ylabel('Y (km)')
ax.set_zlabel('Elevation (m)')
ax.set_title('3D Surface Plot of Elevation Data')

繪製等高線圖

plt.subplot(122)
CS = plt.contour(X, Y, Z, colors='k')
plt.clabel(CS, inline=1, fontsize=10)

標註點 A(30,0) 和 B(43,30)

注意:由於X和Y是網格座標,我們需要找到最接近這些值的索引

idx_a_x = np.argmin(np.abs(x - 30))
idx_a_y = np.argmin(np.abs(y - 0))
idx_b_x = np.argmin(np.abs(x - 43))
idx_b_y = np.argmin(np.abs(y - 30))

plt.plot(x[idx_a_x], y[idx_a_y], 'ro', markersize=5, label='A(30,0)')
plt.plot(x[idx_b_x], y[idx_b_y], 'go', markersize=5, label='B(43,30)')
plt.xlabel('X (km)')
plt.ylabel('Y (km)')
plt.title('Contour Plot of Elevation Data with Points A and B')
plt.legend()

計算地表面積的近似值(忽略地形起伏)

real_area = 43.65 * 58.2
print(f"Actual Surface Area (ignoring elevation changes): {real_area} km^2")

顯示圖形

plt.tight_layout()
plt.show()

print("學號:3025")

相關文章