LoginSignup
1
0

More than 5 years have passed since last update.

pySpherepts > Jupyter > 結果の座標を球面上に表示する実装 v0.2 > 奥の点排除 > 同じものが得られた

Last updated at Posted at 2017-11-26
動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)

処理

pySpherepts > Jupyter > 結果の座標を球面上に表示する実装 v0.1 > 余分な点が見える (奥側の点のようだ)
上記の問題点は「奥側の点が隠面処理されずに見えている」ことだろう。

プロットするデータから排除するようにした。

排除を容易にするため一つの座標のquadrant(象限)を排除することにした。
加えて、view設定を変更することで、残った点が正面に見えるようにする。

code v0.2

plotSphNodes_171126.ipynb
import matplotlib.pyplot as plt
from matplotlib import cm, colors
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from pylab import rcParams
from matplotlib.colors import LightSource

# https://stackoverflow.com/questions/31768031/plotting-points-on-the-surface-of-a-sphere-in-pythons-matplotlib

rcParams['figure.figsize'] = 10,10
rcParams['figure.dpi'] = 130

# Create a sphere
r = 1
pi = np.pi
cos = np.cos
sin = np.sin
phi, theta = np.mgrid[0.0:pi:100j, 0.0:2.0*pi:100j]
x = r*sin(phi)*cos(theta)
y = r*sin(phi)*sin(theta)
z = r*cos(phi)

#Import data
data = np.genfromtxt('res_IcodsNodes_4_0_171126.txt')
data = data * 1.0005
xx, yy, zz = np.hsplit(data, 3) 

xs, ys, zs = [], [], []
for ax, ay, az in zip(xx, yy, zz):
    if (ay > 0):
        xs += [ax]
        ys += [ay]
        zs += [az]
xx, yy, zz = xs, ys, zs

#Set colours and render
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.plot_surface(
    x, y, z,  rstride=1, cstride=1, color='y', alpha=1.0, linewidth=0, shade=False)

ax.scatter(xx,yy,zz,color="k",s=15)

ax.set_xlim([-1,1])
ax.set_ylim([-1,1])
ax.set_zlim([-1,1])
ax.set_aspect("equal")
plt.tight_layout()
ax.view_init(0, 90)
plt.show()

qiita.png

MATLABの結果

MATLABでsphereptsを実行した結果は以下。

qiita.png

上記は下記にて得られた (spherepts使用)。

>> [x0,tri0] = getIcosNodes_log(4,0);
>> plotSphNodes(x0)
>> view(0,0)

APIの比較

Matplotlibのview_init()
https://matplotlib.org/mpl_toolkits/mplot3d/api.html

view_init(elev=None, azim=None)

MATLABのview()
https://jp.mathworks.com/help/matlab/ref/view.html

view(az,el)

view(90,0)にすると配置が異なる。
座標系(xyzとxzyなど)が二つのプラットフォームで異なるのかも。
azimuthの定義が異なっていた。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0