Как построить кривую для функции на трехмерном графике c - Python - PullRequest
0 голосов
/ 29 мая 2020

У меня есть эта функция:

z = 0.000855995633558468*x**2 + 0.0102702516120239*x + 0.00451027901725375*y**2 - 2.23785431578513*y + 251.029058292935

У меня также есть списки (X, Y, Z) координат точек из этой функции. Затем я создал этот код для построения графика с этими координатами:

fig = plt.figure()
ax = fig.gca(projection='3d')
plt.plot(X, Y, Z)

plt.show() 

enter image description here

Как видите, с помощью этого кода я присоединяюсь к точки по сегментам. Как я могу построить кривую, проходящую через эти точки?

1 Ответ

1 голос
/ 29 мая 2020

Короче говоря, Python не знает, как все точки xyz должны быть соединены друг с другом для создания поверхности, поэтому он просто строит линии между ними.

Если вы хотите построить поверхность, Z-координаты являются функцией его координат x и y, вам нужно создать сетку всех возможных комбинаций координат xy и получить результирующую z-сетку. Затем вы можете построить сетки.

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

def z_func(x, y):
    z = 0.000855995633558468 * x ** 2 + 0.0102702516120239 * x + \
        0.00451027901725375 * y ** 2 - 2.23785431578513 * y + \
        251.029058292935
    return z

# Creates a 1D array of all possible x and y coordinates
x_coords = np.linspace(-30, 30, 100)
y_coords = np.linspace(180, 220, 100)

# Creates 2D array with all possible combinations of x and y coordinates,
# so x_grid.shape = (100, 100) and y_grid.shape = (100, 100)
[x_grid, y_grid] = np.meshgrid(x_coords, y_coords)

# Evaluates z at all grid points
z_grid = z_func(x_grid, y_grid)

# Plotting
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x_grid,y_grid,z_grid)
plt.show()

enter image description here

...