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 교차 제품
참조:

추천

출처blog.csdn.net/juluwangriyue/article/details/123860024