向量法计算空间点到线段的距离(python)
中学数学告诉我们,计算点到线段的距离有两种。
我们假设点是P,线段是AB。P和AB都由三维的笛卡尔坐标表示。现计算P到AB的距离。
第一种是,过点P向线段AB上画垂线,判断垂足有没有落在线段上。如果落在线段上,ok,距离就是垂线段的长度;如果没有,则距离转化为点到线段两端点的距离。
另一种方法是,获取线段向量AB、以及点P与线段一端点组成的向量(AP或BP)。将这两个向量做点乘AB·AP,点乘结果即为向量AP在AB上的投影。这时只需比较投影和AB的关系即可:投影小于零,说明P在A的外侧,距离为AP的模长;投影大于0小于AB,说明P在AB中间,距离是垂足距离,这个距离也可以用向量算出来;投影大于AB,说明P在B的外侧,距离为PB的长。
原理部分我简单的写写了,不清楚的自行查阅中学数学教材。
显然,向量法的计算量要远小于第一种方法的。
我在做项目的时候,在网上找现成的代码。没有找到使用第二种向量法、用python写出的。于是自己大概复习了下原理,写了一个代码。
python代码如下:
import math
import numpy as np
from numpy import *#这里我给定了点P和线段AB两端点的坐标
a = np.asarray([-1,1,0])
b = np.asarray([1,1,0])
p = np.asarray([0,0,0])#计算用到的向量
ab=b-a
ap=p-a
bp=p-b
#计算投影长度,并做正则化处理
r = np.dot(ap,ab)/(np.linalg.norm(ab))**2
#分了三种情况
if r > 0 and r < 1:dis = math.sqrt((np.linalg.norm(ap))**2 - (r * np.linalg.norm(ab))**2)
elif r >= 1:dis = np.linalg.norm(bp)
else:dis = np.linalg.norm(ap)
print(dis)
#dis即为所求
向量法计算空间点到线段的距离(python)相关推荐
- costmap_2d 中计算footprint 的内切圆半径和外切圆半径的函数解析——点到线段的距离计算
计算footprint 的内切圆半径和外切圆半径,用到点到线段的距离,计算方法 两个向量的点积等于一个向量在另一个向量的投影 乘以 另一个向量的模 点到线段的三种情况如下: /*作用:计算点到线段的距 ...
- 关于计算点到线段的距离
已知线段AB,求某点到该线段的距离.有三种情况,如图:图中只画出两种,其实垂足在另一侧也是一样的.还有就是垂足与A或B共点,这两种情形可以按照前述两种情况任意之一处理. 当垂足在线段上时(包括垂足与A ...
- c# 计算点到线段的距离
//计算点到线段的距离 public double pointToLine(Vector2 point,LineBase line) {//距离double distance =0;//线段的起点与终 ...
- Kinect体感机器人(三)—— 空间向量法计算关节角度
Kinect体感机器人(三)-- 空间向量法计算关节角度 By 马冬亮(凝霜 Loki) 一个人的战争(http://blog.csdn.net/MDL13412) 终于写到体感机器人的核心代码了, ...
- (转)Kinect体感机器人—— 空间向量法计算关节角度
Kinect体感机器人(三)-- 空间向量法计算关节角度 By 马冬亮(凝霜 Loki) 一个人的战争(http://blog.csdn.net/MDL13412) 终于写到体感机器人的核心代码了, ...
- 点到直线的距离c语言程序,点到线段的距离 题解(C++)
初步分析 这道题之前有<点到直线的距离>一题. 如图,我们不妨来下个定义(名字是乱起的,如果有雷同就以以下定义为准): 对于任意线段l,在其两个端点上分别作垂直于l的直线,若点在两直线之间 ...
- 玲珑杯-射击气球-点到线段的距离
玲珑杯-射击气球-点到线段的距离 求点到线段的距离 由于网页显示吃tab键,缩进无法正常显示 对于空间V-xyz三维几何中点到水平线段的距离,可以投影到xy平面(欧式几何)上.distance = √ ...
- python 点到线段的距离_点到线段的最短距离
博客转载自:http://blog.sina.com.cn/s/blog_5d5c80840101bnhw.html 点到线段最短距离的运算与点到直线的最短距离的运算二者之间存在一定的差别,即求点到线 ...
- 【zzulioj 2127 tmk射气球】+ 空间点到线段距离
2127: tmk射气球 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 537 Solved: 97 SubmitStatusWeb Board Des ...
最新文章
- 恐惧、野心和迷茫,机器人公民背后的未来世界
- Luhn(卢恩)算法,检测信用卡号的合法性
- Elasticsearch学习笔记-04修改数据
- 文献记录(part81)--Clustering-based k -nearest neighbor classification for large-scale data with ...
- 谈一谈Http Request 与 Http Response
- localdatetime转化为date_LocalDateTime用法(jdk1.8 )
- Android 5.0 API 的变化——开发人员注意
- 电子科技大学2019年计算机复试分数线,2019考研电子科技大学复试分数线已公布...
- oracle两种导出导入方式,即imp与impdp之比较
- Oracle 11g完全卸载(Windows)
- Leetcode 5
- DELPHI XE5 FOR ANDROID 模仿驾考宝典 TMEMO 控件随着字数增多自动增高
- qq登录界面及其实现
- matlab模拟厄米高斯光束,拉盖尔高斯光束_厄米高斯光束MATLAB仿真.pdf
- MySQL面试题常见知识点总结
- 投影仪与计算机连接方式,【投影网教程】投影仪连接电脑的方法
- 企业微信批量导入用户
- 钉钉isv应用开发(钉钉isv应用开发注意事项)
- winget 配置安装路径/卸载等指南
- 【PP-6】新建物料清单BOM