def compute_normal(頂点、面):
ノルム = np.zeros(頂点.形状, dtype=頂点.dtype)
トリス = 頂点[面]
## 残りのコードをスキップ ##
ここで、vertices
は形状 (A,3) の np.ndarray
であり、faces
は np.ndarray は (B,3) の形状になり、tris
は (B,3,3) の形状になります。 (ちなみに、B>A)
tris = vertices[faces]
は実際に何をしているのか?
この例が役立つかもしれません:
numpy を np としてインポート
np.random.seed(123)
頂点 = np.random.rand(3, 3) # 形状 -> (3, 3)
faces = np.random.randint(3, size=(4, 3)) # 形状 -> (4, 3)
印刷(頂点)
# [[0.69646919 0.28613933 0.22685145]
# [0.55131477 0.71946897 0.42310646]
# [0.9807642 0.68482974 0.4809319 ]]
プリント(顔)
# [[1 0 2]
# [0 1 2]
# [1 0 0]
# [0 0 1]]
print(vertices[faces]) # 形状 -> (4, 3, 3)
# [[[0.55131477 0.71946897 0.42310646] # 面==1 -> 頂点の 2 行目を取得
# [0.69646919 0.28613933 0.22685145] # faces==0 -> 頂点の最初の行を取る
# [0.9807642 0.68482974 0.4809319 ]] # 面==2 -> 頂点の 3 行目を取得
# [[0.69646919 0.28613933 0.22685145] # faces==0 -> 頂点の最初の行を取る
# [0.55131477 0.71946897 0.42310646] # 面==1 -> 頂点の 2 行目を取得
# [0.9807642 0.68482974 0.4809319 ]] # 面==2 -> 頂点の 3 行目を取得
# [[0.55131477 0.71946897 0.42310646] # faces==1 -> 頂点の 2 行目を取得
# [0.69646919 0.28613933 0.22685145] # faces==0 -> 頂点の最初の行を取る
# [0.69646919 0.28613933 0.22685145]] # 面==0 -> 頂点の最初の行を取る
# [[0.69646919 0.28613933 0.22685145] # faces==0 -> 頂点の最初の行を取る
# [0.69646919 0.28613933 0.22685145] # faces==0 -> 頂点の最初の行を取る
# [0.55131477 0.71946897 0.42310646]]] # 面==1 -> 2 行目の頂点を取る