点到直线的距离公式推导

点到直线的距离公式推导今天在 PPT 里看到一个点到超平面的距离公式 看了半天没看懂为什么这样算 遂去问学霸 答曰 平面情况下就是点到直线的距离公式 本文地址 blog lucien ink archives 495

点到直线的距离公式推导

本文地址:blog.lucien.ink/archives/495

摘自 点到直线距离公式的几种推导 – 三横先生的文章 – 知乎 的三角形面积法,稍作修改并更正书写错误。

起因

今天在 PPT 里看到一个点到超平面的距离公式 d = 1 ∥ w ∥ ∣ w ⋅ x 0 + b ∣ d = \frac{ 1 }{ \left\| \boldsymbol w \right\| }| \boldsymbol w \cdot \boldsymbol x_0 + \boldsymbol b | d=w1wx0+b,看了半天没看懂为什么这样算,遂去问学霸,答曰“平面情况下就是点到直线的距离公式”。

万分惭愧,我连初中数学都忘了。

三角形面积法

图片来自知乎

直线 l l l 方程为 A x + B y + C = 0 Ax + By + C = 0 Ax+By+C=0 A A A B B B 均不为 0 0 0,点 P ( x 0 , y 0 ) P(x_0, y_0) P(x0,y0),设点 P P P l l l 的距离为 d d d

设点 R ( x R , y 0 ) R(x_R, y_0) R(xR,y0),点 S ( x 0 , y S ) S(x_0, y_S) S(x0,yS)

R , S R, S R,S 在直线 l l l 上,得到

A x R + B y 0 + C = 0 Ax_R + By_0 + C = 0 AxR+By0+C=0 A x 0 + B y S + C = 0 Ax_0 + By_S + C = 0 Ax0+ByS+C=0

所以

x R = − B y 0 − C A x_R = \frac{ -By_0 – C }{ A } xR=ABy0C y S = − A x 0 − C B y_S = \frac{ -Ax_0 – C }{ B } yS=BAx0C

∣ P R ∣ = ∣ x 0 − x R ∣ = ∣ x 0 − − B y 0 − C A ∣ = ∣ A x 0 + B y 0 + C A ∣ | PR | = | x_0 – x_R | = | x_0 – \frac{ -By_0 – C }{ A } | = | \frac{ Ax_0 + By_0 + C }{ A } | PR=x0xR=x0ABy0C=AAx0+By0+C ∣ P S ∣ = ∣ y 0 − y S ∣ = ∣ y 0 − − A x 0 − C B ∣ = ∣ A x 0 + B y 0 + C B ∣ | PS | = | y_0 – y_S | = | y_0 – \frac{ -Ax_0 – C }{ B } | = | \frac{ Ax_0 + By_0 + C }{ B } | PS=y0yS=y0BAx0C=BAx0+By0+C

于是

∣ R S ∣ = P R 2 + P S 2 = A 2 + B 2 A B ⋅ ∣ A x 0 + B y 0 + C ∣ | RS | = \sqrt{ { PR }^2 + { PS }^2 } = \frac{ \sqrt{ A^2 + B^2 } }{ AB } \cdot | Ax_0 + By_0 + C | RS=PR2+PS2
=
ABA2+B2
Ax0+By0+C

Δ P S R \Delta_{PSR} ΔPSR

d ⋅ ∣ R S ∣ = ∣ P R ∣ ⋅ ∣ P S ∣ d \cdot | RS | = | PR | \cdot | PS | dRS=PRPS

d = ∣ P R ∣ ⋅ ∣ P S ∣ ∣ R S ∣ = ∣ A x 0 + B y 0 + C A ∣ ⋅ ∣ A x 0 + B y 0 + C B ∣ A 2 + B 2 A B ⋅ ∣ A x 0 + B y 0 + C ∣ = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 d = \frac{ | PR | \cdot | PS | }{ | RS | } = \frac{ | \frac{ Ax_0 + By_0 + C }{ A } | \cdot | \frac{ Ax_0 + By_0 + C }{ B } | }{ \frac{ \sqrt{ A^2 + B^2 } }{ AB } \cdot | Ax_0 + By_0 + C | } = \frac{ | Ax_0 + By_0 + C | }{ \sqrt{ A^2 + B^2 } } d=RSPRPS=ABA2+B2
Ax0+By0+C
AAx0+By0+CBAx0+By0+C
=
A2+B2
Ax0+By0+C

另一种形式

设函数 f ( x , y ) = A x + B y + C f(x, y) = Ax + By + C f(x,y)=Ax+By+C,直线 l : A x + B y + C = 0 l: Ax + By + C = 0 l:Ax+By+C=0 的法向量为 v ( A , B ) \boldsymbol v(A, B) v(A,B)

则点 P ( x 0 , y 0 ) P(x_0, y_0) P(x0,y0) 到直线 l l l 的距离 d d d

d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 = f ( x 0 , y 0 ) ∥ v ∥ d = \frac{ | Ax_0 + By_0 + C | }{ \sqrt{ A^2 + B^2 } } = \frac{ f(x_0, y_0) }{ \left\| \boldsymbol v \right\| } d=A2+B2
Ax0+By0+C
=
vf(x0,y0)

注: ∥ v ∥ \left\| \boldsymbol v \right\| v 为向量 v \boldsymbol v v 的 2-范数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219739.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:00
下一篇 2026年3月17日 下午10:00


相关推荐

  • ConcurrentSkipListMap和ConcurrentHashMap

    ConcurrentSkipListMap和ConcurrentHashMapConcurrentSk 使用红黑树按照 key 的顺序 自然顺序 自定义顺序 来使得键值对有序存储 但是只能在单线程下安全使用 多线程下想要使键值对按照 key 的顺序来存储 则需要使用 ConcurrentSk ConcurrentSk 的底层是通过跳表来实现的 跳表是一个链表 但是通过使用 跳跃式 查找的方式使得插入 读取数据时复杂度变成了 O logn 跳表 SkipList 使用 空间换时间 的算法 令链表的每个结点不仅记录 next

    2026年3月17日
    1
  • 大模型之DeepSeek-OCR2快速入门实战教程

    大模型之DeepSeek-OCR2快速入门实战教程

    2026年3月16日
    2
  • pycharm如何修改注释行字体及颜色

    pycharm如何修改注释行字体及颜色修改代码的注释行颜色 settings Editor ColorScheme python 进入修改 python 的页面后 就可以修改所有类型的字体了 如下图

    2026年3月27日
    2
  • PS2021神经滤镜Neural Filters离线安装包 亲测可用

    PS2021神经滤镜Neural Filters离线安装包 亲测可用大家好,我北方的狼,哥们儿称我狼大,其实不论啥狼只要不是白眼狼这事就好办,靠谱。好吧,有了PS神经滤镜,哥们你是不是马上也精神了!言归正传。PS2021软件自面试以来,强大的NeuralFilters神经滤镜被诸多用户所期待,官方也加强了对于软件的管控,导致我们的和谐软件往往无法使用这些在线滤镜,刚开始的2021版本还可以在线使用,随着版本的更新,后面就基本不让用了。很多小伙伴更新了软件后,给我留言反馈NeuralFilters神经滤镜无法使用的问题,现在终于找到了解决方法,那就是使用对应…

    2022年5月11日
    31
  • LaTeX:引号

    LaTeX:引号LaTeX;LaTeX引号;LaTeX单引号;LaTeX双引号。

    2022年6月25日
    53
  • HTML简单注册界面——含表单验证[通俗易懂]

    HTML简单注册界面——含表单验证[通俗易懂]最近学习HTML表单,感慨万千。虽然看起来好像不难学,但要是真自己实践起来问题却多多。这里是我写的一个简单的注册页面,只有“注册账号、密码、重输密码”三个文本框,还包含了原生JavaScript验证。(记一下,也希望能给有需要的人一点帮助。)

    2025年7月20日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号