求点到直线的垂足和最近点_点到直线最近点的坐标_fffalling的博客-程序员秘密

技术标签: 杂谈  

1.公式(比较稳啊)
设直线方程为ax+by+c=0,点坐标为(m,n)
则垂足为((b*b*m-a*b*n-a*c)/(a*a+b*b),(a*a*n-a*b*m-b*c)/(a*a+b*b))
2.计算点到线段的最近点

如果该线段平行于X轴(Y轴),则过点point作该线段所在直线的垂线,垂足很容
易求得,然后计算出垂足,如果垂足在线段上则返回垂足,否则返回离垂足近的端
点;

如果该线段不平行于X轴也不平行于Y轴,则斜率存在且不为0。设线段的两端点为
pt1和pt2,斜率为:
k = ( pt2.y - pt1. y ) / (pt2.x - pt1.x );
该直线方程为:
y = k* ( x - pt1.x) + pt1.y
其垂线的斜率为 - 1 / k,
垂线方程为:
y = (-1/k) * (x - point.x) + point.y
联立两直线方程解得:
x = ( k^2 * pt1.x + k * (point.y - pt1.y ) + point.x ) / ( k^2 + 1)
y = k * ( x - pt1.x) + pt1.y;

然后再判断垂足是否在线段上,如果在线段上则返回垂足;如果不在则计算两端点
到垂足的距离,选择距离垂足较近的端点返回。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ffgcc/article/details/80033038

智能推荐

像素关系_pix转换px_hellolinshoujie的博客-程序员秘密

px: pixels(像素). 不同设备显示效果相同,比如我们800*480的屏幕宽度就是 800px  dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,通常屏幕大时,density就大,屏幕小时,

中断过程与主程序调用子程序过程的比较_a2102004335的博客-程序员秘密

1、两过程定义与作用子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和查表等5种。子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调用,甚至被不同的程序所调用。一般微机首先执行主程序,碰到调用指令就转去执行子程序...

小飞鱼通达二开 修复一个通达OA集团版用户授权查看部门范围的BUG(图文)_小飞鱼通达二开的博客-程序员秘密

今天碰到一个集团版,话说这个集团版呢有一个功能,可以设置每个人的查看组织范围,可是实际使用时发现不是这么回事啊,明明设置了可是有些部门就是看不到呢。编辑用户的时候,这里会多出一个功能:经过查找问题,发现问题就在这里,当选择多个部门时设置是这样的:保存一下就行了对吧,如果不在意的话这里就会被忽略了。然鹅,仔细看一下会发现这里居然没有都保存上:这是什么操作,有存上的还有没存上的。经过小飞鱼的直觉说这里一定是字段设计出了问题,经过查看数据表的结构设计发现果然是这里出现了问题,设计的字段

Unity记一次Amplify Shader Editor入门渲染案例中文解释——UV流动动画_amplify shader uv_avi9111的博客-程序员秘密

多年以前,热衷于可视化,当然,一事无成后来,却放弃了可视化在学Shader的过程,也是坚决不用工具没想到,当自己真正用工具的时候;

[Python] 使用 PySimpleGUI 进行 GUI 编程_没掉发的程序员的博客-程序员秘密

以上框架虽然使用难度大,需要学习的东西很多,但是使用PySimpleGUI可以降低学习成本,实际代码量可以减少1/10到50%。当您将完成的模块制作成可执行文件以供分发时,在将包合并到其中时需要小心。顺便说一下,PySimpleGUI 本身的许可证是“支持的 Python 版本为3.4 及以上。首先,让我们显示一个简单的屏幕。为方便 GUI 编程而开发的包。关于 PySimpleGUI。PySimpleGUI 是。内容使用 GUI 框架“由于是外包,所以必须安装。更多介绍请查看官方文档。

jzoj4757. 【NOIP2016提高A组模拟9.4】树上摩托()_jzoj4757 树上摩托_hxxxx!的博客-程序员秘密

4757. 【NOIP2016提高A组模拟9.4】树上摩托DescriptionSherco是一位经验丰富的魔♂法师。Sherco在第零次圣杯战争中取得了胜利,并取得了王之宝藏——王の树。他想把这棵树砍去任意条边,拆成若干棵新树,并装饰在他的摩托上,让他的摩托更加酷炫。但Sherco认为,这样生成的树不具有美感,于是Sherco想让每棵新树的节点数相同。他想知道有多少种方法分割这棵树。...

随便推点

Python通过lParam获取x坐标和y坐标 代替GET_X_LPARAM()_python用于获取x坐标的函数_两只程序猿的博客-程序员秘密

问题描述在将 Qt 代码翻译成 PySide2 代码的时候遇到一个问题,就是Qt里面可以用 GET_X_LPARAM() 函数和 GET_Y_LPARAM() 函数来获得 lParam 的 x 坐标和 y 坐标,而 Python 里我没找到这两个函数。解决方法通过上网搜索相关信息,我发现了可以通过位运算取出lParam中的 x 坐标和 y 坐标。代码如下:x = msg.lParam & 65535y = msg.lParam >> 16这里的 msg.lParam 是我获

linux初学笔记_成埃的博客-程序员秘密

Linux:一种操作系统起源:Unix操作系统在20世纪60年代构思完成并实现,并在1970年首次发布。它因容易获取与可移植性高而广泛被学术机构和工商企业采用、复制和修改。它的设计对其他系统的作者影响很大。在1983年,理查德·斯托曼创建了以创建一个自由软件,类Unix,与POSIX兼容的操作系统为目标的GNU计划。作为这个计划其中的一部分,他又写了GNU通用公共许可证(GPL

自己动手实现RAFT算法_python raft_aducode的博客-程序员秘密

自己动手实现RAFT算法前段时间学习了一下分布式系统的raft算法,相比较Paxos协议,理解起来确实容易多了,于是就产生了自己动手实现一套基于raft一致性协议的分布式缓存的想法,经过大约两个月的空闲时间,终于完成了一个可以运行的python版本aducode/simple-raft-py模块划分项目主要包括如下几个模块: 1. server:main loop所在,在main loop中处理

Python-函数_agg7911的博客-程序员秘密

1.函数是可以在同一个空间内生存的,但是也会像变量一样后面的一个同名函数的功能会覆盖前面的功能2.变量的引用 :在python中变量在函数中都是引用的关系3.变量的作用域4.函数的参数# 同一个空间下声明两个同名函数def one(a,b): print(a+b)def one(a,b): print(a*b)one(10,4)#输出的结果为40#变量的引用de...

数据库篇(二)——什么是存储过程?有哪些优缺点?_赤瞳寓言的博客-程序员秘密

存储过程就是一些编译好了的SQL语句,这些SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后给这些代码块取一个名字,在用到这个功能的时候调用即可。 存储过程详解参考: http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html优点:存储过程是一个预编译的代码块,执行效率比较高存储过...

程序员面试准备3---sizeof 测试_int *pi = new int[ 12 ];cout << "pi: " << sizeof( _oMY110的博客-程序员秘密

#include #include #include using namespace std;class B  {  private:        const int a;//只能在构造函数初始化列表中初始化        static int b;//在类的实现文件中定义并初始化        const static int c;//与 s

推荐文章

热门文章

相关标签