点到线的距离计算公式
图形编程中可能会用到点到线的距离计算这个问题。找了下资料,五花八门,仔细试了下,许多是错的。还有许多是起始条件不一样而不适用的。经过最近的研究、推算与总结。终于把这一块搞清楚了。写出来一是给自己的劳动成果拍照留底,二是分享给大家,让大家不必走弯路。
点:(x0,y0)
线:Ax+By+C=0
①距离=ABS(A*x0+B*y0+C) / SQRT(A*A+B*B)
线:y=kx+b
②距离=ABS(k*x0-y0+b) / SQRT(k*k+1)
变量关系
k=-A/B
A=-kB
b=-C/B
C=-bB
线为2个不同点(x1,y1)和(x2,y2)来确定
A=-(y1-y2)/(x1-x2)*B
C=-(y2*x1-y1*x2)/(x1-x2)*B
代入①,得
③距离=ABS[-(y1-y2)/(x1-x2)*x0 + y0 - (y2*x1-y1*x2)/(x1-x2)] / SQRT{1+[(y1-y2)/(x1-x2)]^2}
化简得
④距离=ABS[(y1-y2)*x0 - (x1-x2)*y0 + y2*x1 - y1*x2] / SQRT[(x1-x2)^2+(y1-y2)^2]
变量关系
k=(y1-y2)/(x1-x2)
b=(y2*x1-y1*x2)/(x1-x2)
以上公式已通过测试。
测试数据:
(x0,y0)=(1,1)
(x1,y1)=(1,4)
(x2,y2)=(5,1)
根据勾3股4弦5,得高= 3*4/5=2.4,即距离=2.4
太久没推导数学公式了,中途在数学与编程都犯了点小错,搞了3天终于算是OK。各位就不必再像我这么犯傻了。
博主简介:佘焕敏(shé),洋名 Billy Sir。
关注编程基础技术,并致力于研究软件的自动化生成。 对编程规范化、面向对象的极致使用也有着浓厚的兴趣。 同时非常希望能够写程序到65岁。
只有工匠精神,才能把常人觉得单调乏味的代码,当作作品雕刻成艺术品。
重点:这里几乎每一篇文章,都是我认真创作的,凝结了心血。写作从来都不是一件容易的事,对从小语文不好的我而言,是难上加难。而且,你发现没有,文中没有广告。这篇文章介绍了为什么要写这些文章。
放个赞赏码,省得找起麻烦,万一真有人要赞赏呢。赞赏伤钱,三思后行。真要赞赏,一两块意思一下就好。