是否可以/实用将 3d 线段转换为 2d 中的点,以便我可以轻松地从其原点测量点?

问题描述 投票:0回答:1

考虑以下场景:

desired plane conversion

我有一条 3d 线段来跟踪到达给定跑道的理想方法。飞机的目标是尝试沿着这条特定的线飞入达阵区,但是,没有人是完美的,玩家不可避免地会飞得太高、太低、离这条线太远或太远。

我的目标是确定玩家是否太高、太低、太左或太右。如果玩家在任何给定一侧太远,则执行某些操作(这包括向玩家打印他们太高或太低)。

问题: (考虑到上图:)如果我在 3d 空间中有给定的笛卡尔线段(line = x, y, z && line2 = x1, y1, z1)和相对于线的玩家点(也在 3d 空间中) ,将 3d 线转换为其自身轴(原点 0, 0)上的奇点并测量到玩家点相对于原点的距离是否有意义/是否实用? 如果是这样,我怎样才能将固定维度中的这条 3d 线转换为单独维度中的点。

我的思考过程: 只要我们向下看,每条 2d 线都可以表示为 1d 中的一个点。如果我们这样做并将该点作为二维网格的原点,测量相对距离就会变得很容易。

我认为也可以使用其他方法/途径,例如叉积,但如果这更便宜,我更愿意使用这种方法。

无论如何,我很想听听您的反馈。请让我知道你在想什么! 注意:我使用的是lua

我见过一些提到同质坐标的内容,但我注意到,由于尽管需要旋转轴,但轴是固定的,因此它会在各种条件下引起问题。
测量到直线上最近点的距离很简单,但在尝试确定它相对于直线是向左还是向右/向上还是向下时就不那么容易了。

matrix geometry trigonometry projection algebra
1个回答
0
投票
  1. 创建基础向量

    X
    右,
    Y

    您可以使用当地地面法线

    n
    、线
    (p0,p1)
    方向和叉积来执行此操作

    X = cross( n , p1-p0 );
    Y = cross( n , X ); Y /= |Y|;
    X = cross( Y , n ); X /= |X|;
    
  2. 转换

    x = dot( p-p0 , X )
    y = dot( p-p0 , Y )
    

    现在

    x,y
    是与您想要的方向对齐的线的有符号距离...

© www.soinside.com 2019 - 2024. All rights reserved.