前言

在平面几何中通常我们判断或求直线的相交方法是:用两直线的表达方程,判断其斜率或求二元方法解;但是这种方法经常要考虑很多特殊情况,例如:与坐标轴X平行时(斜率 k = 0 k=0 k=0),与坐标轴Y平行时(斜率 k = ∞ k=\infty k=∞)等等;这些代数几何的方法处理起来都比较琐碎,不好统一解法,因此应当考虑图形学的处理方法来解决,用向量处理解决,这样就无需考虑斜率等问题,会更加便利。具体原理可以查看参考文献,以下为本人对原理的总结。

参考文献:《计算机图形学——用OpenGL实现(第2版)》 清华大学出版社

平面直线的相交

  1. 平面直线的表达方式
    两点A( a x , a y a_{x},a_{y} ax​,ay​),B( b x , b y b_{x},b_{y} bx​,by​)在直线L上,
    向量 a ⃗ = B − A = B A → \vec a = B - A = \overrightarrow {BA} a =B−A=BA ,
    则直线方程 L ( t ) L(t) L(t)为: L ( t ) = A + a ⃗ t L(t) = A + \vec a t L(t)=A+a t
    直线的法向量(垂直于直线的向量或称为与直线正交的向量)为: n ⃗ \vec n n ;
    设点R为直线上任意位置一点,则有直线L的点-法向量形式为:
    n ⃗ ⋅ ( R − A ) = 0 \vec n \cdot(R - A) = 0 n ⋅(R−A)=0
    另外,向量 a ⃗ ⊥ \vec a^\perp a ⊥表示为向量 a ⃗ \vec a a 的逆时针正交向量, a ⃗ ⊥ = ( − a y , a x ) \vec a^\perp = (-a_y,a_x) a ⊥=(−ay​,ax​)

  2. 平面直线的相交
    假定点A,B确定一直线,点C,D确定一直线,
    那么向量 a ⃗ = B − A \vec a = B- A a =B−A,向量 c ⃗ = D − C \vec c = D - C c =D−C,
    则直线AB为: A B ( t ) = A + a ⃗ t AB(t) = A + \vec a t AB(t)=A+a t
    则直线CD为: C D ( u ) = C + c ⃗ u CD(u) = C + \vec c u CD(u)=C+c u
    求直线相交点,即存在 A B ( t ) = C D ( u ) AB(t) = CD(u) AB(t)=CD(u)
    则: A + a ⃗ t = C + c ⃗ u A+\vec a t = C + \vec c u A+a t=C+c u
    令向量 b ⃗ = C − A \vec b = C - A b =C−A,那么化简可得 a ⃗ t = b ⃗ + c ⃗ u \vec a t = \vec b + \vec c u a t=b +c u
    因为 c ⃗ ⊥ ⋅ c ⃗ = 0 \vec c^\perp \cdot \vec c = 0 c ⊥⋅c =0,消除未知变量u对等式的影响,则等式两边同时点乘以 c ⃗ ⊥ \vec c^\perp c ⊥,那么有上式可得 t = c ⃗ ⊥ ⋅ b ⃗ c ⃗ ⊥ ⋅ a ⃗ t = \frac {\vec c^\perp \cdot \vec b} {\vec c^\perp \cdot \vec a } t=c ⊥⋅a c ⊥⋅b ​
    其中,当 c ⃗ ⊥ ⋅ a ⃗ = 0 \vec c^\perp \cdot \vec a = 0 c ⊥⋅a =0时,两直线平行
    同理,亦可消除t对等式的影响,得到 u = a ⃗ ⊥ ⋅ b ⃗ c ⃗ ⊥ ⋅ a ⃗ u = \frac {\vec a^\perp \cdot \vec b} {\vec c^\perp \cdot \vec a} u=c ⊥⋅a a ⊥⋅b ​
    带入直线方程可得交点I: I = A + ( c ⃗ ⊥ ⋅ b ⃗ c ⃗ ⊥ ⋅ a ⃗ ) a ⃗ I = A + ( \frac {\vec c^\perp \cdot \vec b} {\vec c^\perp \cdot \vec a } )\vec a I=A+(c ⊥⋅a c ⊥⋅b ​)a
    或者 I = C + ( a ⃗ ⊥ ⋅ b ⃗ c ⃗ ⊥ ⋅ a ⃗ ) c ⃗ I = C + (\frac {\vec a^\perp \cdot \vec b} {\vec c^\perp \cdot \vec a}) \vec c I=C+(c ⊥⋅a a ⊥⋅b ​)c

平面线段的相交

根据上述平面直线相交方程 A B ( t ) = A + a ⃗ t AB(t) = A + \vec a t AB(t)=A+a t可得,当 t = 0 t=0 t=0时, A B ( t ) = A AB(t) = A AB(t)=A;当 t = 1 t=1 t=1时, A B ( t ) = B AB(t) = B AB(t)=B;
即当点在线段AB上时, 0 ≤ t ≤ 1 0 \le t \le 1 0≤t≤1
同理可得,当点在线段CD上时, 0 ≤ u ≤ 1 0 \le u \le 1 0≤u≤1
由此可判断两线段是否相交,或直线与线段是否相交,以及线段的重合等其他问题

补充:两直线相交的另外一种解法
直线 L 1 L_1 L1​使用方程 L 1 ( t ) = A + a ⃗ t L_1(t)= A + \vec a t L1​(t)=A+a t,A为直线 L 1 L_1 L1​上已知一点,向量 a ⃗ \vec a a 为直线 L 1 L_1 L1​对应的向量;
直线 L 2 L_2 L2​使用方程 n ⃗ ⋅ ( P − B ) = 0 \vec n \cdot (P - B) = 0 n ⋅(P−B)=0,B为直线 L 2 L_2 L2​上已知一点,向量 n ⃗ \vec n n 为直线 L 2 L_2 L2​的法向量,P为待求点;
直线 L 1 L_1 L1​与 L 2 L_2 L2​带入方程得: n ⃗ ⋅ ( A + a ⃗ t − B ) = 0 \vec n \cdot (A+\vec a t - B) = 0 n ⋅(A+a t−B)=0
化简为 n ⃗ ⋅ ( A − B ) + n ⃗ ⋅ a ⃗ t = 0 \vec n \cdot (A - B) + \vec n \cdot \vec a t = 0 n ⋅(A−B)+n ⋅a t=0
解得 t = n ⃗ ⋅ ( B − A ) n ⃗ ⋅ a ⃗ t = \frac {\vec n \cdot (B - A)} {\vec n \cdot \vec a} t=n ⋅a n ⋅(B−A)​

平面图形原理总结(1):直线相交相关推荐

  1. 平面图形原理总结(3):多边形相交

    前言 继续总结关于图形学的问题,这次总结下多边行的相交问题,同样可以自行阅读参考文献了解,以下是本人的自行总结内容. 参考文献:<计算机图形学--用OpenGL实现(第2版)> 清华大学出 ...

  2. n条直线相交最多有几个邻补角_【初一】 n(n1)模型在相交线中的应用

    数形结合 跳动空间思维点.线.面 分类讨论 灌溉逻辑严密的田 化归思想 悟得推己及人.大道至简 函数方程 最值求出个"醉"极限 你待数学如初见 题目待你如初恋 智慧本是星星点点 积 ...

  3. n条直线相交最多有几个邻补角_【东升二中数字课堂】创意微课直线的交点|Super数学璐...

    感谢您关注洛阳东升二中官方微信!如果您尚未关注,请点击图片上方的文字"洛阳市东升第二中学",加关注! 课题名称  |  <直线的交点> 授课教师  |  王璐 制作团队 ...

  4. 判断线段和直线相交 POJ 3304

    1 // 判断线段和直线相交 POJ 3304 2 // 思路: 3 // 如果存在一条直线和所有线段相交,那么平移该直线一定可以经过线段上任意两个点,并且和所有线段相交. 4 5 #include ...

  5. n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律

    今天给大家整理的是[初中数学]102条做初中几何辅导线的规律 资料如果能帮到你,希望你可以帮忙点赞-感谢-收藏支持一下! 若你需要下载word来打印,可以查看我的个人简介,上面有资料下载方式. (资料 ...

  6. 程序员面试金典——7.3判断直线相交

    程序员面试金典--7.3判断直线相交 Solution1:我的答案,虽然能AC,但不是很讲究,吸收教训 class CrossLine { public:bool checkCrossLine(dou ...

  7. 已知抛物线与直线相交两点和抛物线顶点,求抛物线和直线所围成的面积?

    已知抛物线与直线相交两点和抛物线顶点,求抛物线和直线所围成的面积? 顶点:p1(-b/2a),((4ac-b^2)/2a): 抛物线方程:y=ax^2+bx+c; 直线方程:y=k*x+b; 已知:p ...

  8. 判断两条线段/直线相交,并求交点

      一.矢量基本知识     因为后面的计算需要一些矢量的基本知识,这里只是简单的列举如下,如果需要更加详细的信息,可以自行搜索wikipedia或google. 1.矢量的概念:如果一条线段的端点是 ...

  9. 两条直线相交的证明以及交点的求解

    一.两条直线相交的证明: 首先我们要知道向量的叉乘,向量的叉乘得到的也是一个向量,其值为以最初的两条向量为临边的平行四边形的面积,方向根据右手定则得出. 知道了这个就可以证明了,具体的看以下的图片 从 ...

最新文章

  1. vim的简单介绍与使用
  2. Uber提出损失变化分配方法LCA,揭秘神经网络“黑盒”
  3. Leetcode 74. 搜索二维矩阵 (每日一题 20210907)
  4. 【Nginx】判断URL中是否存在某个参数Parameter
  5. XMC-GAN:从文本到图像的跨模态对比学习
  6. CORS 请求未能成功_CORS攻击概述
  7. 计算机如何玩二十四点游戏,数学二十四点游戏有什么技巧吗?
  8. 设计灵感|浓浓人文感!中文活动海报设计学习案例
  9. php现实的九九乘法,php趣味编程 - php 输出九九乘法
  10. mysql数据库修改排序规则
  11. 颠覆传统!麦肯锡的数字化咨询:只用5步,打造创新的数据架构
  12. Python程序-打印九九乘法表
  13. FPS游戏:方框透视算法分析
  14. Spring Cloud基础教程 - 程序猿DD
  15. 【并发编程】Once 基本用法和如何实现以及常见错误
  16. 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 - 核心功能篇
  17. 小学计算机教案2018六年级,2017年小学六年级下册信息技术教学计划
  18. 服务器cpu都有哪些型号,盘点目前性价比最高的CPU有哪些型号
  19. Credly 数字证书
  20. 快速入门 Remix IDE

热门文章

  1. 「马化腾 IT峰会」上微博热搜,网友:马云没去
  2. multiplexer protocol研究
  3. 2020用vue实现仿美团导航切换功能和淘宝购物车功能,实现默认第一个导航显示效果?
  4. 每天学一点flash(5) actionscript 3.0 外部加载mp3音乐
  5. E : 子串循环问题 (Ver. I)
  6. 成为黑客_黑客将成为2020年政府的首选武器
  7. Android 手机克隆/一键换机原理初探
  8. 3D游戏建模在游戏公司中是什么样的角色?薪资高,有前途吗
  9. MCE公司:MCE 中国生命科学研究促进奖获奖论文集锦二
  10. 如何查找一张照片的拍摄地点