数学がわからない

日々の勉強をアウトプットする。

3次元空間における平面について

平面の式

import math
import numpy as np
# 3次元空間における平面と直線の交点
# 3次元空間における平面を、Ax+By+Cz+D=0とする。
# 3次元空間における直線を、x/a=y/b=z/cとする。

# 平面の中心
X = 100*math.sqrt(3)
Y = 100
Z = 100
# 原点からの距離
L = math.sqrt(pow(X,2) + pow(Y,2) + pow(Z,2))
# 平面の法線
A = X/L
B = Y/L
C = Z/L
#
D=-(X*A + Y*B + Z*C)
print('[A,B,C,D]=', [A,B,C,D])

平面に大きさを設定

# 平面上をx軸、y軸方向に1移動したときの、空間上の移動距離
# x,y が与えられたときのz:z = -(x*A + y*B + D)/C 
# x=X+1, y=Y のときのz
z_x = -((X+1)*A + Y*B + D)/C

# 単位ベクトル
v_x = np.array([1,0,z_x-Z])/math.sqrt(1 + pow((z_x-Z),2))
# x=X, y=Y+1 のときのz
z_y = -(X*A + (Y+1)*B + D)/C
v_y = np.array([0,1,z_y-Z])/math.sqrt(1 + pow((z_y-Z),2))

print(v_x)
print(v_y)

# 平面の範囲を指定
H=20
W=20

print(v_x*(-W))
print(v_x*(W))
print(v_y*(-H))
print(v_y*(H))

直線と交点

# 直線の向きを表すベクトル
a=0.5
b=0.5
c=5

# 平面と交点は、
x = -D/(A+B*b/a+C*c/a)
y = x*b/a
z = x*c/a

print(x,y,z)