【问题标题】:Finding the intersection of a line segment (one point inside the rect, one outside) and a rect side查找线段(矩形内一个点,矩形外一个点)和矩形边的交点
【发布时间】:2016-06-19 00:15:22
【问题描述】:

我试图通过在屏幕边缘有一个指向屏幕外最后一个敌人的图标来引导玩家找到场上的最后一个敌人。

屏幕是矩形,玩家是矩形内的点,敌人是矩形外的点。

Example

我能想到的解决方案是找到哪一侧将相交(我不确定如何正确执行,但我想首先需要确定它是否会在垂直或水平侧相交),然后使用线性方程来找到 x 或 y。或者,您可以在每一侧使用 line-line-intersection 方法,但由于屏幕矩形永远不会改变,这似乎有点过头了。

我的第一个解决方案在纸上为一个测试用例工作,但在 Unity 中根本无法使用。

有没有人有解决方案或可以将我推向正确的方向?非常感谢。

【问题讨论】:

    标签: math unity3d


    【解决方案1】:

    让矩形边有方程

    X = XLeft
    Y = YBottom
    X = XRight
    Y = YTop
    

    玩家-敌人向量

    D = (D.X, D.Y) = (E.X - P.X, E.Y - P.Y)
    

    如果 D.X 为正,考虑与右边缘相交(否则与左边缘)

    P.X + t * D.X = XRight
    

    如果 D.Y 为正,考虑与顶边相交(否则与底边相交)

    P.Y + u * DY.Y = YTop
    

    求解 t 和 u 的方程。如果u小于t,则先与水平边相交,求与表达式相交的X坐标

    XInt =  P.X + u * D.X
    

    【讨论】:

    • 谢谢,这行得通!有没有办法在算法期间检测敌人是否在矩形内?现在我只是检查它之前是否在矩形中,如果是我取消计算交集。
    • 是的,可以检测敌人是否在矩形内 - t>1u>1。但是检查矩形更简单,所以我认为 - 在计算之前进行检查是值得的。
    猜你喜欢
    • 2013-05-15
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2012-11-20
    • 2014-06-09
    相关资源
    最近更新 更多