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)

说明:

  1. 首先计算出p1到p2的方向向量dir_vec
  2. 投影dir_vec到xz平面上,得到xz方向上的方向向量xz_dir_vec
  3. 计算出xz方向上的单位向量xz_unit_vec
  4. 计算目标方向向量,在本例中目标方向为(0, 90, 0),即y轴正方向。
  5. 将目标方向向量旋转到xz平面上,得到xz方向上的目标方向向量xz_target_dir_vec
  6. 计算在xz平面上的点到目标方向向量的距离xz_distance
  7. 计算在xz平面上移动的距离xz_movement,即xz_unit_vec和xz_target_dir_vec的点积。
  8. 计算在三维空间中移动的距离movement,即xz_movement在三维空间中的投影长度。
  9. 打印输出结果。
Panda3D: 计算点在特定方向移动距离

原文地址: https://www.cveoy.top/t/topic/oSag 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录