还是一个几何算法问题 点到线段最点距离的交点

mepjava 2009-05-27 12:10:55
一个点到线段的最短距离已经求出来了,现在想求从这个点一直连到那个线段上的那个交点

比如这个点在线段的延长线上,这个交点就是线段的端点

但是如果这个点到这个线段的最短距离是它和这个线段所构成三角形的那条高,想求的是这条高线和原来那条线段的交点

不知道我表达的清楚不清楚,忘高手们帮忙~
...全文
520 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用楼主 mepjava 的帖子:]
一个点到线段的最短距离已经求出来了,现在想求从这个点一直连到那个线段上的那个交点

比如这个点在线段的延长线上,这个交点就是线段的端点

但是如果这个点到这个线段的最短距离是它和这个线段所构成三角形的那条高,想求的是这条高线和原来那条线段的交点

不知道我表达的清楚不清楚,忘高手们帮忙~
[/Quote]

其实,可以扫描线段上的点到该点连线,判断连线长是否等于(或者接近你已知的最短距离)只要扫描到距离从递减转为递增,那该点就是你要的点了。
fairchild811 2009-05-27
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20050307/16/3831132.html
lpf000 2009-05-27
  • 打赏
  • 举报
回复
说实话 不够清楚
findcsdn 2009-05-27
  • 打赏
  • 举报
回复

1. 判断线段两端点是否重合的情况.

2. 点在线段内, 那么找个点就是交点.

3. 点在线段外,那么最短距离就是和线段垂直线的交点(这个通过数学方法很好求出来)。

4. 判断交点是否在延长线上(判断x,y坐标同时落在线段两端点区域内,要考虑水平线和垂直线的情况)。




beyond071 2009-05-27
  • 打赏
  • 举报
回复
上面写快了...有点错误,现在这个应该可以了

//已知线段A、B和一点P,要求P到线段AB上的最短距离点Q
//解:(1)点A和点P组成一向量AP

//(2)点A和点B组成一向量AB

//(3)求点P在向量AB上的投影:t = (向量AP 点乘 向量AB) / 向量AB的模

//(4)设l = 向量AB的长度(即线段的长),那么当t > 0 或者 t < l时,有:Q = A + t * 向量AB / 向量AB的模
// 当t <= 0时,有:Q = A
// 当t >= l时,有:Q = B

光宇广贞 2009-05-27
  • 打赏
  • 举报
回复
你……使用数学方法啊!

1、如果该外点到某一端点的向量,与两端点之间有的向量平行,则取两端点与外点之间的距离的最短值的那个端点就行了。
判断向量平行的方法是,叉积为零。

2、如果该外点不在沿长线上,那么线段的斜率你是知道的,那么与之垂直的向量的斜率你也就可以算出来了。那么k你知道了,x0与y0就是外点的坐标你都知道了,不过是解方程( y - y0 ) = k ( x - x0 ) 与 y - y1 = k1 * ( x - x1 ),后者为线段的直线方程,你解出y与x就是交点啦!
beyond071 2009-05-27
  • 打赏
  • 举报
回复

//已知线段A、B和一点P,要求P到线段AB上的最短距离点Q
//解:(1)点A和点P组成一向量AP

//(2)点A和点B组成一向量AB

//(3)求点P在向量AB上的投影:t = (向量AP 点乘 向量AB) / 向量AP的模

//(4)设l = 向量AB的长度(即线段的长),那么当t > 0 或者 t < l时,有:Q = A + t * 向量AP
// 当t <= 0时,有:Q = A
// 当t >= l时,有:Q = B
toma991367 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lpf000 的回复:]
说实话 不够清楚
[/Quote]

真的不够清楚
pathuang68 2009-05-27
  • 打赏
  • 举报
回复
1. 假设那个点是A,线段是BC;
2. 现在线段BC上取一点D,使其起始位置和点B相同,先后求AD的长度;
3. 让点D沿着线段向C移动一个单位长度(单位长度由楼主自行设定,这个要看精度要求);
4. 计算AD的长度,并和步骤2得到的长度进行比较,并保留<AD长度,D的坐标>这样的信息;
5. 重复步骤3、4,可以得到最短的AD长度。得到最短AD长度时的D点坐标(可查询4中保留的数据),就是楼主要求的交点。
coverallwangp 2009-05-27
  • 打赏
  • 举报
回复
假设线段的两个端点的坐标为(a,b)(c,d);另外点n的坐标为(e,f)

则线段所在的直线方程为:
令k = (d-b)/(c-a)[斜率]
y-b = k*(x-a)

点n到线段所在直线的最短距离就是过点n做直线的垂线

假设交点为(x0,y0)

则可以得到

y0-b = k*(x0-a)
(y0-f)/(x0-e)= -k
这样可以解出x0,y0
如果 a <= x0 <= c,则所求的交点就是(x0,y0)
否则 则比较 |x0-a|,|x0-c|绝对值的大小,取绝对值小的那个点为交点,比如|x0-c|较小,则取交点为(c,d)


lingyin55 2009-05-27
  • 打赏
  • 举报
回复
假设知道线段两个端点坐标为(a,b)(c,d)
lingyin55 2009-05-27
  • 打赏
  • 举报
回复
楼主描述的不是很清楚,已知条件也没有说清。

线段的两个端点坐标知道么?线段外一点的坐标知道么?
假设知道为(a,b)(c,d)
线段外的一点为(e,f)
上面三个为已知
要求的交点设为(x,y)。这个为未知

先判断(e,f)是否在线段上,是的话就计算它到两个端点的距离,谁小谁就是交点。
如果不在线段上,因为它到直线的距离已知,这时有两个直角三角形,那么可以求出
两个直角三角形的所有边长,其中x,y为未知数。由勾股定理可以从两个三角形
分别得到两个方程,求解方程可得x,y
hai040 2009-05-27
  • 打赏
  • 举报
回复
知道距离就求圆(球)和直线交点
aaaa3105563 2009-05-27
  • 打赏
  • 举报
回复
帮顶··
㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断点是否在线段上 2 6. 求一点饶某点旋转后的坐标 2 7. 求矢量夹角 2 ㈡ 线段及直线的基本运算 1. 点与线段的关系 3 2. 求点到线段所在直线垂线的垂足 4 3. 点到线段的最近点 4 4. 点到线段所在直线的距离 4 5. 点到折线集的最近距离 4 6. 判断圆是否在多边形内 5 7. 求矢量夹角余弦 5 8. 求线段之间的夹角 5 9. 判断线段是否相交 6 10.判断线段是否相交但不交在端点处 6 11.求线段所在直线的方程 6 12.求直线的斜率 7 13.求直线的倾斜角 7 14.求点关于某直线的对称点 7 15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求多边形面积 9 5. 判断多边形顶点的排列方向,方法一 10 6. 判断多边形顶点的排列方向,方法二 10 7. 射线法判断点是否在多边形内 10 8. 判断点是否在凸多边形内 11 9. 寻找点集的graham算法 12 10.寻找点集凸包的卷包裹法 13 11.判断线段是否在多边形内 14 12.求简单多边形的重心 15 13.求凸多边形的重心 17 14.求肯定在给定多边形内的一个点 17 15.求从多边形外一点出发到该多边形的切线 18 16.判断多边形的核是否存在 19 ㈣ 圆的基本运算 1 .点是否在圆内 20 2 .求不共线的三点所确定的圆 21 ㈤ 矩形的基本运算 1.已知矩形三点坐标,求第4点坐标 22 ㈥ 常用算法的描述 22 ㈦ 补充 1.两圆关系: 24 2.判断圆是否在矩形内: 24 3.点到平面的距离: 25 4.点是否在直线同侧: 25 5.镜面反射线: 25 6.矩形包含: 26 7.两圆交点: 27 8.两圆公共面积: 28 9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31
计算几何算法(含源代码) ㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断点是否在线段上 2 6. 求一点饶某点旋转后的坐标 2 7. 求矢量夹角 2 ㈡ 线段及直线的基本运算 1. 点与线段的关系 3 2. 求点到线段所在直线垂线的垂足 4 3. 点到线段的最近点 4 4. 点到线段所在直线的距离 4 5. 点到折线集的最近距离 4 6. 判断圆是否在多边形内 5 7. 求矢量夹角余弦 5 8. 求线段之间的夹角 5 9. 判断线段是否相交 6 10.判断线段是否相交但不交在端点处 6 11.求线段所在直线的方程 6 12.求直线的斜率 7 13.求直线的倾斜角 7 14.求点关于某直线的对称点 7 15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求多边形面积 9 5. 判断多边形顶点的排列方向,方法一 10 6. 判断多边形顶点的排列方向,方法二 10 7. 射线法判断点是否在多边形内 10 8. 判断点是否在凸多边形内 11 9. 寻找点集的graham算法 12 10.寻找点集凸包的卷包裹法 13 11.判断线段是否在多边形内 14 12.求简单多边形的重心 15 13.求凸多边形的重心 17 14.求肯定在给定多边形内的一个点 17 15.求从多边形外一点出发到该多边形的切线 18 16.判断多边形的核是否存在 19 ㈣ 圆的基本运算 1 .点是否在圆内 20 2 .求不共线的三点所确定的圆 21 ㈤ 矩形的基本运算 1.已知矩形三点坐标,求第4点坐标 22 ㈥ 常用算法的描述 22 ㈦ 补充 1.两圆关系: 24 2.判断圆是否在矩形内: 24 3.点到平面的距离: 25 4.点是否在直线同侧: 25 5.镜面反射线: 25 6.矩形包含: 26 7.两圆交点: 27 8.两圆公共面积: 28 9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31 13.公式: 32
㈠ 点的基本运算 1. 平面上两点之间距离 1 2. 判断两点是否重合 1 3. 矢量叉乘 1 4. 矢量点乘 2 5. 判断点是否在线段上 2 6. 求一点饶某点旋转后的坐标 2 7. 求矢量夹角 2 ㈡ 线段及直线的基本运算 1. 点与线段的关系 3 2. 求点到线段所在直线垂线的垂足 4 3. 点到线段的最近点 4 4. 点到线段所在直线的距离 4 5. 点到折线集的最近距离 4 6. 判断圆是否在多边形内 5 7. 求矢量夹角余弦 5 8. 求线段之间的夹角 5 9. 判断线段是否相交 6 10.判断线段是否相交但不交在端点处 6 11.求线段所在直线的方程 6 12.求直线的斜率 7 13.求直线的倾斜角 7 14.求点关于某直线的对称点 7 15.判断两条直线是否相交及求直线交点 7 16.判断线段是否相交,如果相交返回交点 7 ㈢ 多边形常用算法模块 1. 判断多边形是否简单多边形 8 2. 检查多边形顶点的凸凹性 9 3. 判断多边形是否凸多边形 9 4. 求多边形面积 9 5. 判断多边形顶点的排列方向,方法一 10 6. 判断多边形顶点的排列方向,方法二 10 7. 射线法判断点是否在多边形内 10 8. 判断点是否在凸多边形内 11 9. 寻找点集的graham算法 12 10.寻找点集凸包的卷包裹法 13 11.判断线段是否在多边形内 14 12.求简单多边形的重心 15 13.求凸多边形的重心 17 14.求肯定在给定多边形内的一个点 17 15.求从多边形外一点出发到该多边形的切线 18 16.判断多边形的核是否存在 19 ㈣ 圆的基本运算 1 .点是否在圆内 20 2 .求不共线的三点所确定的圆 21 ㈤ 矩形的基本运算 1.已知矩形三点坐标,求第4点坐标 22 ㈥ 常用算法的描述 22 ㈦ 补充 1.两圆关系: 24 2.判断圆是否在矩形内: 24 3.点到平面的距离: 25 4.点是否在直线同侧: 25 5.镜面反射线: 25 6.矩形包含: 26 7.两圆交点: 27 8.两圆公共面积: 28 9. 圆和直线关系: 29 10. 内切圆: 30 11. 求切点: 31 12. 线段的左右旋: 31

64,683

社区成员

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

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