我想有一个直接的C#函数来获得最近点(从点P)到线段AB.抽象函数可能如下所示.我搜索了SO,但没有找到可用的(由我)解决方案.
public Point getClosestPointFromLine(Point A, Point B, Point P);
Run Code Online (Sandbox Code Playgroud) 我画了两点A(x,y)--- B(x,y)之间的一条线现在我有第三个点C(x,y).我想知道如果C位于A和B之间的线上.我想用java语言来做.我找到了几个类似的答案.但是,都有一些问题,没有人是完美的.
我试图确定2D空间中从点到多边形的距离.该点可以在多边形内部或外部; 多边形可以是凸面或凹面.
如果该点位于多边形内或多边形外部,其距离小于用户定义的常量d,则该过程应返回True; False除此以外.
我发现了一个类似的问题:从点到多面体或多边形的距离.但是,在我的情况下,空间是2D,多边形可以是凹的,所以它与那个不同.
我想应该有一个方法比偏移多边形更简单,d并确定它在多边形内部或外部.
任何算法,代码或提示我谷歌周围将不胜感激.
我需要计算从lat/lng GPS点P到2个其他lat/lng GPS点A和B描述的线段的最短距离.
"跨轨道距离"帮助我计算P和A和B描述的大圆之间的最短距离.
但是,这不是我想要的.我需要P和AB 线段之间的距离,而不是整个大圆.
我使用了http://www.movable-type.co.uk/scripts/latlong.html中的以下实现
Formula: dxt = asin( sin(?13) ? sin(?13??12) ) ? R
where:
?13 is (angular) distance from start point to third point
?13 is (initial) bearing from start point to third point
?12 is (initial) bearing from start point to end point
R is the earth’s radius
Run Code Online (Sandbox Code Playgroud)
在第一幅图像中,由绿线表示的跨轨道距离是正确的,并且实际上是到线段AB的最短距离.
在第二个图像中显示了跨轨道距离的问题,在这种情况下,我希望最短距离是简单距离AP,但是跨轨道距离给出了由红线指示的距离.
如何更改算法以考虑这一点,或检查点X是否在AB内.是否可以通过计算方式完成此操作?或者迭代是唯一可能的(昂贵的)解决方案?(沿着AB取N点并计算从P到所有这些点的最小距离)
为简单起见,图像中的所有线都是直的.实际上,这些是大圆上的小弧
在iPhone上,我以十进制度获取用户的位置,例如:北纬39.470920和经度= -0.373192; 那是A点.
我需要创建一个具有另一个GPS坐标的线,也是十进制度,B点.然后,计算从A到B的线与另一个点C之间的距离(垂直).
问题是我对度数的值感到困惑.我希望得到米的结果.转换需要什么?计算这个的最终公式怎么样?
有没有人在java中有一个函数来找到点和线段/边之间的最短距离?我找到的每个例子都是用另一种语言编写的,并使用了一堆子函数。它不能基于它们是垂直的假设。
更新
我将python函数移植到java。如果有人擅长数学并且可以验证,我将不胜感激。x 和 y 是点,其他参数是线段。
public float pDistance(float x, float y, float x1, float y1, float x2, float y2) {
float A = x - x1;
float B = y - y1;
float C = x2 - x1;
float D = y2 - y1;
float dot = A * C + B * D;
float len_sq = C * C + D * D;
float param = -1;
if (len_sq != 0) //in case of 0 length line
param …Run Code Online (Sandbox Code Playgroud) 我需要一个免费的(开源)解决方案,给出lat/lng可以返回壁橱城市/州或邮编.mysql不是一个选项,如果可能的话,小型轻量级数据库将是最好的.
更新:没有网络服务,即使是最小的插件也会每天带来5000万次展示,因此添加服务请求会占用响应时间.我不希望在请求上添加超过200毫秒.
我在csv中有数据库,lat/lon/zip/city/state它只是如何存储,更重要的是如何最快地检索它.
我有一个3d点P和一个由A和B定义的线段(A是线段的起点,B是结束点).
我想计算P和AB线之间的最短距离.
计算点到无限线的距离很容易,因为它们是Wolfram Mathworld的解决方案,我已经实现了这个,但我需要为有限长度的线做这个.
经过大量的考察,我还没有在3d中找到一个可靠的解决方案.
我已经实现了算法来计算C++中的点积,交叉积,大小等,其结构包含浮点数x,y和z.
几乎所有语言中的伪代码,链接或代码都很棒.
我有大量的2D线段.所以,我知道; 每个线段的行号,Begin(X,Y,Z)和End(x,Y,Z).我想获得给定线段的接近线段.同样对所有人.
为了找到距离,我可以应用它
如果我说我的数据是;
所以,最后我希望将接近线作为每个线段的矢量.我听说这种矢量矢量可以用r树数据结构.我正在搜索它,但仍然无法找到相关的一个.我也看了一下opencv,有一个r-tree但它说了一些关于分类器和训练阶段...所以,我想它不适合我.
任何人都可以知道如何得到 行号,然后它的邻居行为前;
1 = {2,4,,7,66,32,12}
2 = {1,4,5,6}
3 = {...} .. ..这种类型的矢量使用r树.
我知道,我们可以使用kd-tree获得这种类型的向量.但它是专为点数据而设计的.因此,我认为很难在这种情况下使用kd-tree.请帮忙,谢谢.
致电所有专家!我见过各种帖子,说实话,我的需求与SO上的答案略有不同.
我想创建一个UI,用户可以在特定区域创建各种线条(直线,曲线,摆动等)(现在我们称之为"画布").每行可以有多个实例.然后,用户可以根据需要拖动和编辑这些行.因此,他们可以拉伸它,更改起点,终点等,甚至可以将整行拖动到画布的边界内.
我设法画线(使用drawRect)并在每一行的末尾显示可拖动的手柄(参见参考图像),用户可以在画布的边界(红色矩形)内拖动端点以满足需要.
我面临的问题是如何点击以激活特定行的编辑.因此,默认情况下,拖动句柄将不可见,并且用户可以点击该行以激活"编辑"模式,然后显示句柄(再次点按以取消选择).因此,在上图中,我希望能够检测黄色矩形中的触摸.请记住,UIView边界是整个画布区域,允许用户自由拖动,因此检测触摸显然很困难,因为还有透明区域,并且每行可以有多个实例.
这是我的代码到目前为止的行类(startHandle和endHandle是每一端的句柄):
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint startPoint = CGPointMake(self.startHandle.frame.origin.x + self.startHandle.frame.size.width/2, self.startHandle.frame.origin.y + self.startHandle.frame.size.height/2);
CGPoint endPoint = CGPointMake(self.endHandle.frame.origin.x + self.endHandle.frame.size.width/2, self.endHandle.frame.origin.y + self.endHandle.frame.size.height/2);
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self];
if (CGRectContainsPoint(CGRectMake(startPoint.x, startPoint.y, endPoint.x - startPoint.x , endPoint.y - startPoint.y), touchLocation))
{
//this is the green rectangle! I want the yellow one :)
NSLog(@"TOUCHED IN HIT AREA");
}
}
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, …Run Code Online (Sandbox Code Playgroud)