2017-07-25 13 views
-2

球の表面上の矩形領域をトレースしようとしています。球の表面に矩形領域をプロットする

これは球のための私が持っているコードです:

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() 

ポイントがカートcoordsのに緯度/経度から変換されます。

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") 

これらはポイントであり、デカルト座標に変換されています。球体の表面に表示するのが問題です。彼らはまた、荒い矩形を形成する必要があります。私は、球の表面に矩形を描画するために点を接続することができるようにしたいと思います。さて、矩形は非常に小さいことを意味します。

+2

婉曲表現のようです "私がしようとしています"。あなたは何かを試みましたか?この文脈で「トレースアウト」とは何を意味しますか?プロットする座標はどれですか?予想されるプロットはどのように見えますか? – ImportanceOfBeingErnest

答えて

0

デカルト座標への変換が間違っている可能性があります。ただ、球を作成するときのように、あなたはいつも

enter image description here

を使用する場合があります。しかし、それはもちろん、球面上に定義されているか、「緯度」及び「経度」に依存します。

さらに重要なことに、散布図は正しくありません。常にscatter(x,y,z)、第1引数x座標、第2引数y座標、第3引数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() 

矩形がかなり小さいため、表示するにはかなりズームインする必要があります。

enter image description here

関連する問題