Unity点到线段的最短距离
抄的Unity的源码
HandleUtility.DistancePointLine 是UnityEditor代码,源码如下,这样就可以在Runtime中运行
注意性能开销!
/// <summary>
/// 计算点到线段的最短距离
/// </summary>
/// <param name="point"></param>
/// <param name="lineStart"></param>
/// <param name="lineEnd"></param>
/// <returns></returns>
public static float DistancePointLine(Vector3 point, Vector3 lineStart, Vector3 lineEnd)
{
Vector3 rhs = point - lineStart;
Vector3 vector3 = lineEnd - lineStart;
float magnitude = vector3.magnitude;
Vector3 lhs = vector3;
if ((double) magnitude > 9.99999997475243E-07)
lhs /= magnitude;
float num = Mathf.Clamp(Vector3.Dot(lhs, rhs), 0.0f, magnitude);
Vector3 v3 = lineStart + lhs * num;
return Vector3.Magnitude (v3 - point);
}
向量计算法:
AB为向量,求C到AB的距离,计算向量AC在向量AB上投影得到AD,可计算DC的长度

性能没问题
float GetPointToLineDistance(Vector3 point, Vector3 start, Vector3 end) {
Vector3 sp = point - start;
Vector3 se = end - start;
Vector3 project = Vector3.Project (sp, se);
Vector3 line = sp - project;
return line.magnitude;
}
俯视角二维
private float GetPointToPlaneDistance(Vector3 point, Vector3 start, Vector3 end) {
point = new Vector3 (point.x, 0, point.z);
start = new Vector3 (start.x, 0, start.z);
end = new Vector3 (end.x, 0, end.z);
Vector3 sp = point - start;
Vector3 se = end - start;
Vector3 project = Vector3.Project (sp, se);
Vector3 line = sp - project;
return line.magnitude;
}
胶囊体计算法:
上面的方法计算量较大,这种是实际项目中用的一种

Unity点到线段的最短距离的更多相关文章
- (点到线段的最短距离)51nod1298 圆与三角形
1298 圆与三角形 给出圆的圆心和半径,以及三角形的三个顶点,问圆同三角形是否相交.相交输出"Yes",否则输出"No".(三角形的面积大于0). 收起 ...
- POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
A Round Peg in a Ground Hole Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4438 Acc ...
- POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...
- NEU 1496 Planar map 计算几何,点到线段距离 难度:0
问题 H: Planar map 时间限制: 1 Sec 内存限制: 128 MB提交: 24 解决: 22[提交][状态][讨论版] 题目描述 Tigher has work for a lon ...
- poj1584(判断凸包+求点到线段的距离)
题目链接:https://vjudge.net/problem/POJ-1584 题意:首先要判断凸包,然后判断圆是否在多边形中. 思路: 判断凸包利用叉积,判断圆在多边形首先要判断圆心是否在多边形中 ...
- POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内
首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...
- [Processing]点到线段的最小距离
PVector p1,p2,n; float d = 0; void setup() { size(600,600); p1 = new PVector(150,30);//线段第一个端点 p2 = ...
- sgu 1348 Goat in the Garden 2【点到线段的距离】
链接: http://acm.timus.ru/problem.aspx?space=1&num=1348 http://acm.hust.edu.cn/vjudge/contest/view ...
- arcgis engine计算点到线的最短距离
IProximityOperator接口用于获取两个几何图形的距离,以及给定一个Point,求另一个几何图形上离离给定点最近的点.IProximityOperator接口的主要方法有:QueryNea ...
- Peter and Snow Blower CodeForces - 613A (点到线段距离)
大意: 给定多边形, 给定点$P$, 求一个以$P$为圆心的最小的圆环包含整个多边形. #include <iostream> #include <cmath> #define ...
随机推荐
- 如何使用 websocket 完成 socks5 网络穿透
有盆友好奇所谓的网络穿透是怎么做的 然后talk is cheap,please show code 所以只好写个简单且常见的websocket例子, 这里的例子大致是这个原理 浏览器插件(或者其他) ...
- 用 DevEco Studio 模拟器这些能力 没真机也能高效调测鸿蒙原生应用
随着鸿蒙生态的快速发展,越来越多的开发者投身于鸿蒙原生应用的开发中.然而,在实际开发中,真机设备短缺.调测场景复杂等问题常困扰着开发者.为解决这些问题,华为在DevEco Studio上为开发者提供了 ...
- 活动箭线的"总时差和专用时差"
总时差:后大 - 前小 - 作业时间 专用时差:后小 - 前大 - 作业时间
- Nacos源码—6.Nacos升级gRPC分析一
大纲 1.Nacos 2.x版本的一些变化 2.客户端升级gRPC发起服务注册 3.服务端进行服务注册时的处理 4.客户端服务发现和服务端处理服务订阅的源码分析 1.Nacos 2.x版本的一些变化 ...
- 题解:P3388 【模板】割点(割顶)
提示:本篇题解缺乏详细的证明,如有需要,请移步其他题解. 算法介绍 Tarjan 算法,这里用来解决割点问题,时间复杂度为 \(O(n+m)\). 割点的简要定义是:去掉割点及其所连的边,该图分为两个 ...
- springBoot 使用jpa数据保存数据报数组越界问题
在User类中定义gender使用的是一个枚举(Male, Female),但是在实际生成的表中该属性是一个int, 于是在保存数据时出现了 java.lang.ArrayIndexOutOfBoun ...
- 基于AI的智能农业病虫害识别系统实战指南
引言 在农业现代化进程中,病虫害防治始终是保障粮食安全的核心挑战.传统人工识别方式存在效率低.误判率高.响应滞后等问题.本文将通过完整的技术实现流程,展示如何利用Python生态构建智能病虫害识别系统 ...
- L1-2、Prompt 的基础结构拆解
--写得"清楚",AI才"聪明" Prompt 不只是"让 AI 帮我做事"的指令,它是一种对任务的精准建模,写得越准.越具体,AI 表现就 ...
- SQL语句中exists和in有何区别
在SQL性能优化的时候,经常遇到是使用exists还是in提高效率的问题,这里结合之前写的两篇博客<MYSQL中in的用法>和<MYSQL中EXISTS的用法>,总结一下 ...
- pyqt Qscintilla英文学习笔记
由于博客园不能上传pdf,所以图片没了,源文件 链接:https://www.123pan.com/s/qdY9-P4fk3 提取码:aRny 通过百度网盘分享的文件:qscintil- 链接:htt ...