Panda3D: 计算点在特定方向移动距离
from panda3d.core import Vec3
p1 = Vec3(0, 0, 0)
p2 = Vec3(10, 0, 10)
# 计算p1到p2的方向向量
dir_vec = p2 - p1
# 投影到xz平面上
xz_dir_vec = Vec3(dir_vec.x, 0, dir_vec.z)
# 计算xz方向上的单位向量
xz_unit_vec = xz_dir_vec.normalized()
# 计算目标方向向量
target_dir_vec = Vec3(0, 0, 1).rotate_mat(Vec3(0, 1, 0), Vec3(0, 90, 0))
# 计算目标方向向量在xz平面上的投影
xz_target_dir_vec = Vec3(target_dir_vec.x, 0, target_dir_vec.z)
# 计算xz平面上的点到目标方向向量的距离
xz_distance = xz_target_dir_vec.length()
# 计算在xz平面上移动的距离
xz_movement = xz_unit_vec.dot(xz_target_dir_vec)
# 计算在三维空间中移动的距离
movement = xz_movement / xz_dir_vec.length() * dir_vec.length()
print(movement)
说明:
- 首先计算出p1到p2的方向向量
dir_vec。 - 投影
dir_vec到xz平面上,得到xz方向上的方向向量xz_dir_vec。 - 计算出xz方向上的单位向量
xz_unit_vec。 - 计算目标方向向量,在本例中目标方向为(0, 90, 0),即y轴正方向。
- 将目标方向向量旋转到xz平面上,得到xz方向上的目标方向向量
xz_target_dir_vec。 - 计算在xz平面上的点到目标方向向量的距离
xz_distance。 - 计算在xz平面上移动的距离
xz_movement,即xz_unit_vec和xz_target_dir_vec的点积。 - 计算在三维空间中移动的距离
movement,即xz_movement在三维空间中的投影长度。 - 打印输出结果。
原文地址: https://www.cveoy.top/t/topic/oSag 著作权归作者所有。请勿转载和采集!