![]() |
1
405
这里有一些正确的代码,在C++中。它假定一个二维类向量
编辑:我需要一个JavaScript实现,所以这里是,没有依赖性(或者注释,但是它是上面的直接端口)。点用对象表示
编辑2:我需要一个Java版本,但更重要的是,我需要它在3D,而不是2D。
|
![]() |
2
94
这里是JavaScript中最简单的完整代码。 x,y是你的目标点,x1,y1到x2,y2是你的直线段。 更新:修复注释中的0长度行问题。
|
![]() |
3
63
这是一个针对有限线段的实现,而不是像这里大多数其他函数那样的无限线(这就是我为什么要这样做的原因)。 例子是 here . 蟒蛇:
AS3:
爪哇
这些是用 this . |
![]() |
4
22
在我自己的问题中 how to calculate shortest 2D distance between a point and a line segment in all cases in C, C# / .NET 2.0 or Java? 当我找到答案时,我被要求在这里写一个C答案:所以这里是,修改自 http://www.topcoder.com/tc?d1=tutorials&d2=geometry1&module=Static :
我是@所以不回答,但提出问题,所以我希望我不会因为某些原因而获得百万的选票,但建设批评家。我只是想(并且被鼓励)分享别人的想法,因为这个线程中的解决方案要么是使用某种外来语言(fortran,mathematica),要么被某人标记为错误。对我来说,唯一有用的(Grumdrig)是用C++编写的,没有人标记它有错误。但它缺少调用的方法(点等)。 |
![]() |
5
21
在f中,距离点的距离
向量
实例使用:
|
![]() |
6
19
在Mathematica它使用段的参数化描述,并将点投影到段定义的直线中。当参数在段中从0变为1时,如果投影在该界限之外,我们计算到相应端点的距离,而不是垂直于段的直线。
绘图结果:
绘制那些比 截止距离 :
等高线图:
|
![]() |
7
18
对于任何感兴趣的人,下面是约书亚的javascript代码到Objective-C的简单转换:
我需要这个解决方案
|
![]() |
8
11
嘿,我昨天刚写的。它在actionscript 3.0中,基本上是JavaScript,尽管您可能没有相同的点类。
此外,这里还有一个非常完整和易读的关于这个问题的讨论: notejot.com |
![]() |
9
11
对于懒惰的人,这里是我的目标C端口@grumdrig的解决方案:
|
![]() |
10
10
无法抗拒用python对其进行编码:)
|
![]() |
11
8
以下是格鲁德里格解决方案的更完整的拼写。此版本还返回最近点本身。
|
![]() |
12
7
考虑一下对Grumdrig上述答案的修改。很多时候你会发现浮点不精确会导致问题。我在下面的版本中使用了double,但是您可以很容易地更改为float。重要的是它使用一个epsilon来处理“slop”。此外,你会多次想知道交叉口发生在哪里,或者是否发生了。如果返回的t为<0.0或>1.0,则不会发生碰撞。但是,即使没有发生碰撞,很多时候您会想知道到p的段上最近的点在哪里,因此我使用qx和qy返回这个位置。
|
![]() |
13
7
使用弧切线的单线解决方案: 想法是搬家 一 到(0,0)并顺时针旋转三角形 C 躺在X轴上, 当这种情况发生时, 通过 将是距离。
C.*
一行C(转换为SQL)
|
![]() |
14
6
我假设你想找到 最短的 点与直线段之间的距离;为此,需要找到与穿过点的直线段(直线B)垂直的直线(直线),确定该直线(直线)与穿过直线段(直线B)的直线之间的交点;如果该点位于直线段的两点之间,那么距离就是你的点和你刚找到的点之间的距离,即直线和B线的交点;如果点不在你的直线段的两点之间,你需要得到你的点和直线段两端的较近点之间的距离;这可以通过取平方距离(到避免一个平方根)在直线段的点和两点之间;取两者中较近的一个,取其平方根。 |
![]() |
15
5
Grumdrig的C++/JavaScript实现对我非常有用,所以我已经提供了我正在使用的Python直接端口。完整的代码是 here .
|
![]() |
16
5
matlab代码,内置“self-test”,如果调用的函数没有参数:
|
![]() |
17
4
现在我的解决方案也是…… (JavaScript) 它非常快,因为我尽量避免使用任何math.pow函数。 如你所见,在函数的末尾,我有一条线的距离。 代码来自库 http://www.draw2d.org/graphiti/jsdoc/#!/example
|
![]() |
18
4
在T-SQL中编码 点为(@px,@py),线段从(@ax,@ay)到(@bx,@by)
|
![]() |
19
4
看起来StackOverflow上的其他人都贡献了一个答案(到目前为止有23个答案),下面是我对C的贡献。这主要是基于M.Katz的答案,而M.Katz又是基于Grumdrig的答案。
这里有一个小测试程序。
如您所见,我尝试使用避免sqrt()方法的版本和普通版本之间的差异。我的测试表明你可以节省大约2.5%,但我甚至不确定——不同测试运行中的变化是相同数量级的。我还尝试测量Matti发布的版本(加上一个明显的优化),这个版本似乎比基于katz/grumdrig代码的版本慢4%。 编辑:顺便说一句,我也尝试过用一个叉积(和sqrt())来测量到无限线(不是线段)的距离的方法,它大约快32%。 |
![]() |
20
3
下面是devnullicus的C++版本转换成C语言。对于我的实现,我需要知道交叉点,并找到他的解决方案,以便很好地工作。
|
![]() |
21
2
请参见以下网站中的Matlab几何工具箱: http://people.sc.fsu.edu/~jburkardt/m_src/geometry/geometry.html ctrl+f并键入“segment”以查找与线段相关的函数。您需要的功能是“segment\u point dist\u 2d.m”和“segment\u point dist\u 3d.m”。 几何代码可在C版本和C++版本以及FORTRAN77版本和FORTRAN90版本和MATLAB版本中使用。 |
![]() |
22
2
基于Joshua的javascript的自动热键版本:
|
![]() |
23
2
这里用的是斯威夫特
|
![]() |
24
2
在这里没有看到Java实现,所以我将JavaScript函数从已接受的答案翻译成Java代码:
|
![]() |
25
2
WPF版本:
|
![]() |
26
2
C.* 改编自 @Grumdrig
|
![]() |
27
1
这是我写的代码。此代码假定点的定义形式为
|
![]() |
28
1
上面的函数在垂直线上不起作用。这是一个运行良好的函数! 与点p1、p2对齐。检查点为P;
|
![]() |
29
1
这里是与C++答案相同的东西,但是移植到Pascal。Point参数的顺序已更改,以适合我的代码,但是相同的。
|
![]() |
30
1
|