3D坐标里求一个点到线段最短距离的点

rgmlkthh 2008-12-08 12:53:40
如题。用程序实现下,是一个维塔士的笔试题。
谢谢了。
...全文
1025 10 打赏 收藏 转发到动态 举报
写回复
用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秒钟可以检测出上百万个线段

这个是检测一个点和一个线段之间的最短距离的

对于一个系统当中存在大量的线段需要检测的时候,应该把线段按照区域划分成组,建立一个包围盒

先检测点是否在包围盒内部,然后再进入组内检测具体的线段

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧