title.rb
import pandas as pd
import numpy as np
# DataFrameの作成
df = pd.DataFrame(columns=['r', 'theta', 'phi'])
# r, theta, phiの値を生成するリスト内包表記
data = [{'r': r, 'theta': theta, 'phi': phi}
for r in range(4, 5) # rの範囲は1~10
for theta in range(-60, 62, 2)
for phi in range(-60, 62, 2)]
sin_th = np.sin(np.radians(df['theta'].astype(float)))
cos_th = np.cos(np.radians(df['theta'].astype(float)))
sin_ph = np.sin(np.radians(df['phi'].astype(float)))
cos_ph = np.cos(np.radians(df['phi'].astype(float)))
# DataFrameにデータを追加
df = df.append(data, ignore_index=True)
df['x'] = df['r'] * np.sin(np.radians(df['theta'].astype(float))) * np.cos(np.radians(df['phi'].astype(float)))
df['y'] = df['r'] * np.sin(np.radians(df['phi'].astype(float))) * np.cos(np.radians(df['theta'].astype(float)))
df['z'] = df['r'] * ((1-(np.sin(np.radians(df['theta'].astype(float)))**2)*(np.cos(np.radians(df['phi'].astype(float)))**2)-(np.sin(np.radians(df['phi'].astype(float)))**2)*(np.cos(np.radians(df['theta'].astype(float)))**2))**0.5)
df['r_check'] = (df['x']**2 + df['y']**2 + df['z']**2)**0.5
print(df['r_check'].unique())
# データフレームを表示
df.tail()
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 半球のパラメータ
r = 4 # 球の半径
phi, theta = np.mgrid[0:np.pi/2:100j, 0:2*np.pi:100j] # phiとthetaの範囲を設定
# 極座標から直交座標に変換
x = r * np.sin(phi) * np.cos(theta)
y = r * np.sin(phi) * np.sin(theta)
z = r * np.cos(phi)
# プロット
fig = plt.figure(figsize=(16.0, 12.0))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(df['x'], df['y'], df['z'], alpha=0.2)
# 半球をプロット
ax.plot_surface(x, y, z, alpha=0.2)
# 軸の範囲とラベル設定
ax.set_xlim([-4, 4])
ax.set_ylim([-4, 4])
ax.set_zlim([0, 8])
# 軸の縮尺を等しくする
ax.set_box_aspect([1,1,1])
ax.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
# グラフを表示
plt.show()
import numpy as np
import plotly.graph_objs as go
# 半球のパラメータ
r = 4 # 球の半径
phi, theta = np.mgrid[0:np.pi/2:100j, 0:2*np.pi:100j] # phiとthetaの範囲を設定
# 極座標から直交座標に変換
x = r * np.sin(phi) * np.cos(theta)
y = r * np.sin(phi) * np.sin(theta)
z = r * np.cos(phi)
# 半球をプロット
surface = go.Surface(x=x, y=y, z=z, opacity=0.2, colorscale=[[0, 'rgb(0,0,255)'], [1, 'rgb(0,0,255)']])
# 点をプロット
scatter = go.Scatter3d(x=df['x'], y=df['y'], z=df['z'],mode='markers', opacity=0.5, marker=dict(color='grey', size=2))
# レイアウトの設定
layout = go.Layout(
scene=dict(
xaxis=dict(range=[-4, 4], title='X'),
yaxis=dict(range=[-4, 4], title='Y'),
zaxis=dict(range=[0, 8], title='Z'),
aspectmode='cube'
)
)
# グラフの描画
fig = go.Figure(data=[surface, scatter], layout=layout)
fig.show()
plt.scatter(df['x'], df['z'],alpha = 0.2)
plt.scatter(df['y'], df['z'],alpha = 0.2)
plt.scatter(df['x'], df['y'],alpha = 0.2)