关于求直线交点的问题。

12 篇文章 0 订阅
4 篇文章 0 订阅

二维坐标系下,关于求两条之前的交点问题,在国内网站上查来查去都没找到比较清晰易懂的。多数都是解决线段求交点的问题。最后在外国网站找到一篇,感觉讲解比较清晰。现在把他翻译过来。

2D空间中表示一条直线,可以用两点坐标或者一个点和一个方向向量(参数方程)表示。

这里考虑采用参数方程来表示。P = A + tB;A是起点坐标,B是方向向量。t是在方向向量上的长度。

所以,两条直线交于P,A,B点位于直线上。

所以两条直线的方向矢量为v1,v2,有A指向B的向量为v。

 可以得到V1’,表示A到P的向量。

这时,考虑B到P的向量,参数方程为 v2 = B + t*v2 

从B到P,v2的方向上,经过的多少倍距离t呢?

又根据向量加法的几何意义,可以得到,V1‘ = V + tV2

所以只要知道t是多少,交点P的位置就可以 知道啦。

因为P = B + tV2

但是,现在能够求出t值的条件还不够。

又因为V1和V1’是平行的关系,

所以,他们的外积=0。

V1xV1‘ = 0

所以,总结起来,有如下两个条件:

式A   V1’=V+tV2

式B   V1xV1‘=0 

式A代入式B,得

根据这个等式,求t就可以了。

推导过程:

 所以最终结果为:

C#语言代码实现:

    float cross(Vector2 A, Vector2 B)
    {
        return A.x * B.y - B.x * A.y;
    }
    Vector2 GetRayLineCross_T(Vector2 A, Vector2 v1, Vector2 B, Vector2 v2)
    {
        Vector2 v = B - A;
        v1 = v1.normalized;
        v2 = v2.normalized;
        float m = cross(v, v1);
        float n = cross(v1, v2);
        float t = m / n;


        return B+v2*t;
    }

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值