VTK 연구 노트 (24) vtk 공간 기하학적 변환 (2)
태도의 경우 공간 변환에는 일반적으로 이동 및 회전이 포함됩니다.
먼저 변환을 구현하는 데 필요한 일부 벡터 내부 및 외부 제품을 정렬하고 먼저 일부 구현을 정렬한 다음 해당 vtk 구현을 찾습니다.
일반적으로 C++의 Eigen에는 좋은 구현이 있지만 파이썬에서는 명확하지 않습니다.
1. 벡터의 내적과 외적
1.1, numpy 구현
cross = np.cross(tx, ty)
np.cross(tangents_x[:, None, :], tangents_y[None, :, :])
1.2 공식에 따라 구현
def cross(a, b):
c = [a[1]*b[2] - a[2]*b[1],
a[2]*b[0] - a[0]*b[2],
a[0]*b[1] - a[1]*b[0]]
return c
2. 넘파이 외적
2.1, 외적 - 수학적 설명
수학에서는 외적과 외적, 물리학에서는 벡터 곱과 외적이라고도 하는 벡터 곱은 벡터 공간에서 벡터의 이항 연산입니다. 내적과 달리 연산의 결과는 스칼라가 아니라 벡터입니다. 그리고 두 벡터의 외적은 이 두 벡터의 합에 수직입니다. 그 응용 프로그램은 일반적으로 물리적 광학 및 컴퓨터 그래픽에서 매우 광범위합니다.
외적은 3D 디자인 및 게임 개발의 가장 단순한 기본 논리이며 컴퓨터 실무자는 이를 이해해야 합니다.
2차원 공간의 외적은
스칼라처럼 보이지만 실제로 외적의 결과는 z축을 향하는 벡터입니다. 우리는 두 벡터로 둘러싸인 평행사변형의 면적을 계산하려고 시도할 수 있습니다.사실, 우리는 벡터로 둘러싸인 삼각형의 면적을 찾을 수 있습니다. 면적이 밑변*높이라는 것을 알고 있으며, 모든 파생물은 다음과 같습니다.
추정하다:
2.2, 교차 곱 - 프로그램 적용
세 점 P1(-1,0,1), P2(0,2,2) 및 P3(0,-1,2)는 삼각형을 형성할 수 있습니다. 이 삼각형의 면적은 얼마입니까?
import numpy as np
# 构建点
P1 = np.array([-1, 0, 1])
P2 = np.array([0, 2, 2])
P3 = np.array([0, -1, 2])
# A和B两个向量尾部相连
A = P3 - P1
B = P3 - P1
# 计算叉乘
A_B = np.cross(A, B)
# 计算叉乘的膜
AB_mo = np.linalg.norm(A_B)
# 计算面积
Area = AB_mo / 2
print("三角形的面积为:", Area)
삼각형의 면적은 2.1213203435596424입니다.
import numpy as np
# 构建点
P1 = np.array([2, 0, 0])
P2 = np.array([1, 0, 2])
P3 = np.array([-1, 0, 0])
P4 = np.array([2, 5, 0])
# 构建向量,以P1为原点
A = P2 - P1
B = P4 - P1
C = P3 - P1
# 计算叉乘
A_B = np.cross(B, C)
# 计算点积
volume = np.inner(A, A_B)
print("四点围成的体积:", volume)
네 점으로 묶인 볼륨: 30
참조: NumPy 교차 제품
참조: