Python 在球体表面上绘制矩形区域

Python 在球体表面上绘制矩形区域,python,python-3.x,numpy,matplotlib,geopy,Python,Python 3.x,Numpy,Matplotlib,Geopy,我试图在球面上画出一个矩形区域 这是我为球体编写的代码: import numpy as np import random as rand import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.gca(projection='3d') ax.set_aspect("equal") theta, phi = np.mgrid[0:2*np.

我试图在球面上画出一个矩形区域

这是我为球体编写的代码:

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

fig = plt.figure()

ax = fig.gca(projection='3d')

ax.set_aspect("equal")  

theta, phi =  np.mgrid[0:2*np.pi : 20j ,0:np.pi : 20j]

r = 6.3

x = r * np.cos(phi)*np.sin(theta)
y = r * np.sin(phi)*np.sin(theta)
z = r * np.cos(theta)

ax.plot_wireframe(x,y,z, color = "k")
plt.show()
点数将从lat/long转换为cart坐标

lat1x = 46.49913179 * (2*np.pi/360)
lat2x = 46.4423682 * (2*np.pi/360)
long1y = -119.4049072 * (2*np.pi/360)
long2y = -119.5048141 * (2*np.pi/360)

lat3x = 46.3973998 * (2*np.pi/360)
lat4x = 46.4532495 * (2*np.pi/360)
long3y = -119.4495392 * (2*np.pi/360)
long4y = -119.3492884 * (2*np.pi/360)


xw1 = r * np.cos(lat1x)*np.cos(long1y)
yw1 = r * np.cos(lat1x)*np.sin(long1y)
zw1 = r * np.sin(lat1x)

xw2 = r * np.cos(lat2x)*np.cos(long2y)
yw2 = r * np.cos(lat2x)*np.sin(long2y)
zw2 = r * np.sin(lat2x)

xw3 = r * np.cos(lat3x)*np.cos(long3y)
yw3 = r * np.cos(lat3x)*np.sin(long3y)
zw3 = r * np.sin(lat3x)

xw4 = r * np.cos(lat4x)*np.cos(long4y)
yw4 = r * np.cos(lat4x)*np.sin(long4y)
zw4 = r * np.sin(lat4x) 

p1 = [xw1,yw1,zw1]
p2 = [xw2,yw2,zw2]
p3 = [xw3,yw3,zw3]
p4 = [xw4,yw4,zw4]

ax.scatter(p1,p2,p3,p4, color = "r")

这些是点,然后转换成笛卡尔坐标,我很难让它们出现在球体的表面上。它们也应该形成一个粗糙的矩形。我希望能够连接点,在球体表面绘制一个矩形。作为旁白,矩形意味着非常小

您对笛卡尔坐标的转换可能是错误的。就像创建球体时一样,您可能希望使用通常的

但这当然取决于“lat”和“lon”在球体上的定义

更重要的是,散点图是不正确的。它总是
散射(x,y,z)
,第一个参数x坐标,第二个参数y坐标,第三个参数z坐标

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

fig = plt.figure()

ax = fig.gca(projection='3d')

ax.set_aspect("equal")  

theta, phi =  np.mgrid[0:2*np.pi : 20j ,0:np.pi : 20j]

r = 6.3

x = r * np.cos(phi)*np.sin(theta)
y = r * np.sin(phi)*np.sin(theta)
z = r * np.cos(theta)

ax.plot_wireframe(x,y,z, color = "k")


lat1x = 46.49913179 * (2*np.pi/360)
lat2x = 46.4423682 * (2*np.pi/360)
long1y = -119.4049072 * (2*np.pi/360)
long2y = -119.5048141 * (2*np.pi/360)

lat3x = 46.3973998 * (2*np.pi/360)
lat4x = 46.4532495 * (2*np.pi/360)
long3y = -119.4495392 * (2*np.pi/360)
long4y = -119.3492884 * (2*np.pi/360)

def to_cartesian(lat,lon):
    x = r * np.cos(lon)*np.sin(lat)
    y = r * np.sin(lon)*np.sin(lat)
    z = r * np.cos(lat)
    return [x,y,z]

p1 = to_cartesian(lat1x,long1y)
p2 = to_cartesian(lat2x,long2y)
p3 = to_cartesian(lat3x,long3y)
p4 = to_cartesian(lat4x,long4y)

X = np.array([p1,p2,p3,p4])
ax.scatter(X[:,0],X[:,1],X[:,2], color = "r")


plt.show()
因为矩形很小,你需要放大一点才能看到它

“我正在努力”似乎是一种委婉说法。你真的试过什么吗?在这种情况下,“追踪”是什么意思?要绘制的坐标是什么?预期的情节会是什么样子?