社区
C++ 语言
帖子详情
3D坐标里求一个点到线段最短距离的点
rgmlkthh
2008-12-08 12:53:40
如题。用程序实现下,是一个维塔士的笔试题。
谢谢了。
...全文
1025
10
打赏
收藏
3D坐标里求一个点到线段最短距离的点
如题。用程序实现下,是一个维塔士的笔试题。 谢谢了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
longhua1989
2008-12-12
打赏
举报
回复
顶二楼的
Dreamz
2008-12-10
打赏
举报
回复
2楼的解释很不错,up一下
rgmlkthh
2008-12-10
打赏
举报
回复
jtl
星羽
2008-12-08
打赏
举报
回复
线段??
先求点到线段所在直线的最短距离的点(也就是做垂线得到的交点),如果这个点在线段上,则就是所求的点
不在则看看线段两个端点中,那个最靠近这个点,最靠近者就是所求点
healer_kx
2008-12-08
打赏
举报
回复
[Quote=引用 2 楼 hbqing_ting 的回复:]
在二维/三维图形学系统当中,线段的拾取是一个经常使用的功能
如何根据鼠标点来判断线段是否被选择了,最主要的方法之一是通过点到线段的最小距离来判定的
无论二维还是三维情况下,使用点到直线的距离公式似乎是最直接的选择
但是不要忘记点到直线公式计算的是点和直线之间的关系,而不是点和线段之间的关系
需要额外的判断,点在线段上的投影点是否位于线段内部,是才可以采用点到直线的公式,否则就不能
算法如…
[/Quote]
UP
cba_v
2008-12-08
打赏
举报
回复
up
不懂 啊!
pony_ml
2008-12-08
打赏
举报
回复
说实话,题我都没看明白。
究竟是要求距离是多少,还是点的坐标
SearchLife
2008-12-08
打赏
举报
回复
顶2楼
lc19890326
2008-12-08
打赏
举报
回复
2L很详细
hbqing_ting
2008-12-08
打赏
举报
回复
在二维/三维图形学系统当中,线段的拾取是一个经常使用的功能
如何根据鼠标点来判断线段是否被选择了,最主要的方法之一是通过点到线段的最小距离来判定的
无论二维还是三维情况下,使用点到直线的距离公式似乎是最直接的选择
但是不要忘记点到直线公式计算的是点和直线之间的关系,而不是点和线段之间的关系
需要额外的判断,点在线段上的投影点是否位于线段内部,是才可以采用点到直线的公式,否则就不能
算法如下
class Point
float Distance(Point p1, Point p2); // 返回两点之间的距离
float DistanceLine(Point a, Point b, Point c) // a和b是线段的两个端点, c是检测点
{
Point ab = b - a;
Point ac = c-a;
float f = ab * ac;
if (f<0) return Distance(a, c);
float d = ab * ab;
if ( f>d) return Distance(a, c);
f = f/d;
Point D = a + f *ab; // c在ab线段上的投影点
return Distance(a, D);
}
这个算法计算量很少,在现在流行配置的计算机基本上在当中1秒钟可以检测出上百万个线段
这个是检测一个点和一个线段之间的最短距离的
对于一个系统当中存在大量的线段需要检测的时候,应该把线段按照区域划分成组,建立一个包围盒
先检测点是否在包围盒内部,然后再进入组内检测具体的线段
3D
中
点
和
线段
与
线段
上的交
点
之间的最
短距离
以下是一个Python实现的示例,假设我们有
一个
点
`point`和一个
线段
`segment`,我们首先找到
点
到
线段
的垂直向量,然后计算这个向量与
线段
方向向量的夹角余弦值,根据余弦值我们可以得到
线段
上投影
点
与原
点
的距离。如果
点
不在
线段
内(即投影长度小于0或大于
线段
长度),则将最近
点
设为
线段
的端
点
。segment = ((4, 5, 6), (7, 8, 9)) #
线段
为从(4, 5, 6)到(7, 8, 9)# 如果投影长度超过
线段
长度,取
线段
的端
点
作为最近的
点
。# 计算
点
到
线段
垂直向量的积。
求空间中2条
线段
的最
短距离
(用osg+C++写的)
2条
线段
的最
短距离
float DistanceLineToLine( const osg::Vec
3d
& p1,const osg::Vec
3d
& p2,const osg::Vec
3d
& p3,const osg::Vec
3d
& p4 ) { float distance; float x1 = p1.x(); //A
点
坐标
(x1,y1,z1) float y1 = p1.y(
求两条空间直线的最近距离,以及他们最近距离线的两
点
坐标
设有两空间
线段
Ls,其起
点
、终
点
坐标
为s0、s1,方向向量u⃗ =s1−s0 Lt,其起
点
、终
点
坐标
为t0、t1,方向向量v⃗ =t1−t0 记两
线段
对应的直线为ls、lt,采用向量表示法如下: ls=s0+cs⋅u⃗ lt=t0+ct⋅v⃗ 当0≤cs、ct≤1时,上述两式表达 设最
短距离
两
点
分别为sj、tj,则有 sj=s0+sc⋅u⃗ tj=t0+sc⋅v⃗ 其...
三维空间两条直线的最
短距离
、最近
点
及C++算法实现
在双目视觉立体空间重建中,会根据两个相机中的物体图像
坐标
,求取给定
坐标
系的三维
坐标
。根据物体图像
坐标
、相机内参、给定
坐标
系的相机外参,求取相机光轴线的方程,从而实现立体重建,本文主要是解决在已知三维空间两条直线求其最
短距离
、最近
点
及算法实现。
【Apollo Common代码解析-计算
点
到
线段
的距离】
计算
点
到
线段
的最
短距离
,在路径规划领域使用较多,是为基础函数,降低其耗时,对整个规划的效率有益。 先以apollo中使用DistanceTo函数实现为例。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章