考虑以下场景:
我有一条 3d 线段来跟踪到达给定跑道的理想方法。飞机的目标是尝试沿着这条特定的线飞入达阵区,但是,没有人是完美的,玩家不可避免地会飞得太高、太低、离这条线太远或太远。
我的目标是确定玩家是否太高、太低、太左或太右。如果玩家在任何给定一侧太远,则执行某些操作(这包括向玩家打印他们太高或太低)。
问题: (考虑到上图:)如果我在 3d 空间中有给定的笛卡尔线段(line = x, y, z && line2 = x1, y1, z1)和相对于线的玩家点(也在 3d 空间中) ,将 3d 线转换为其自身轴(原点 0, 0)上的奇点并测量到玩家点相对于原点的距离是否有意义/是否实用? 如果是这样,我怎样才能将固定维度中的这条 3d 线转换为单独维度中的点。
我的思考过程: 只要我们向下看,每条 2d 线都可以表示为 1d 中的一个点。如果我们这样做并将该点作为二维网格的原点,测量相对距离就会变得很容易。
我认为也可以使用其他方法/途径,例如叉积,但如果这更便宜,我更愿意使用这种方法。
无论如何,我很想听听您的反馈。请让我知道你在想什么! 注意:我使用的是lua
我见过一些提到同质坐标的内容,但我注意到,由于尽管需要旋转轴,但轴是固定的,因此它会在各种条件下引起问题。
测量到直线上最近点的距离很简单,但在尝试确定它相对于直线是向左还是向右/向上还是向下时就不那么容易了。
创建基础向量
X
右,Y
上
您可以使用当地地面法线
n
、线 (p0,p1)
方向和叉积来执行此操作
X = cross( n , p1-p0 );
Y = cross( n , X ); Y /= |Y|;
X = cross( Y , n ); X /= |X|;
转换
x = dot( p-p0 , X )
y = dot( p-p0 , Y )
现在
x,y
是与您想要的方向对齐的线的有符号距离...