相关疑难解决方法(0)

得到最近的一条线

我想有一个直接的C#函数来获得最近点(从点P)到线段AB.抽象函数可能如下所示.我搜索了SO,但没有找到可用的(由我)解决方案.

public Point getClosestPointFromLine(Point A, Point B, Point P);
Run Code Online (Sandbox Code Playgroud)

c# math geometry

32
推荐指数
5
解决办法
4万
查看次数

检查是一个点(x,y)是在直线上绘制的两个点之间

我画了两点A(x,y)--- B(x,y)之间的一条线现在我有第三个点C(x,y).我想知道如果C位于A和B之间的线上.我想用java语言来做.我找到了几个类似的答案.但是,都有一些问题,没有人是完美的.

java line

29
推荐指数
4
解决办法
4万
查看次数

从点到多边形的距离

我试图确定2D空间中从点到多边形的距离.该点可以在多边形内部或外部; 多边形可以是凸面或凹面.

如果该点位于多边形内或多边形外部,其距离小于用户定义的常量d,则该过程应返回True; False除此以外.

我发现了一个类似的问题:从点到多面体或多边形的距离.但是,在我的情况下,空间是2D,多边形可以是凹的,所以它与那个不同.

我想应该有一个方法比偏移多边形更简单,d并确定它在多边形内部或外部.

任何算法,代码或提示我谷歌周围将不胜感激.

algorithm geometry

22
推荐指数
2
解决办法
3万
查看次数

从Lat/Lng点到Minor Arc段的距离

我需要计算从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到所有这些点的最小距离)

为简单起见,图像中的所有线都是直的.实际上,这些是大圆上的小弧

gis matlab gps distance latitude-longitude

16
推荐指数
1
解决办法
1711
查看次数

GPS坐标以度为单位计算距离

在iPhone上,我以十进制度获取用户的位置,例如:北纬39.470920和经度= -0.373192; 那是A点.

我需要创建一个具有另一个GPS坐标的线,也是十进制度,B点.然后,计算从A到B的线与另一个点C之间的距离(垂直).

问题是我对度数的值感到困惑.我希望得到米的结果.转换需要什么?计算这个的最终公式怎么样?

iphone gps map ios4

11
推荐指数
2
解决办法
5888
查看次数

java中求点到边距离的函数

有没有人在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)

java math

11
推荐指数
2
解决办法
9040
查看次数

给出纬度/经度的最快方法(纬度,城市,州)

我需要一个免费的(开源)解决方案,给出lat/lng可以返回壁橱城市/州或邮编.mysql不是一个选项,如果可能的话,小型轻量级数据库将是最好的.

更新:没有网络服务,即使是最小的插件也会每天带来5000万次展示,因此添加服务请求会占用响应时间.我不希望在请求上添加超过200毫秒.

我在csv中有数据库,lat/lon/zip/city/state它只是如何存储,更重要的是如何最快地检索它.

algorithm geolocation

10
推荐指数
2
解决办法
2万
查看次数

找到从3d点到线段的距离

我有一个3d点P和一个由A和B定义的线段(A是线段的起点,B是结束点).

我想计算P和AB线之间的最短距离.

计算点到无限线的距离很容易,因为它们是Wolfram Mathworld的解决方案,我已经实现了这个,但我需要为有限长度的线做这个.

经过大量的考察,我还没有在3d中找到一个可靠的解决方案.

我已经实现了算法来计算C++中的点积,交叉积,大小等,其结构包含浮点数x,y和z.

几乎所有语言中的伪代码,链接或代码都很棒.

math 3d vector

10
推荐指数
2
解决办法
2万
查看次数

处理2d线段的有效方法

我有大量的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.请帮忙,谢谢.

c++ kdtree r-tree data-structures

9
推荐指数
1
解决办法
1849
查看次数

如何检测可拖动线上的触摸(使用drawRect绘制)

致电所有专家!我见过各种帖子,说实话,我的需求与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)

iphone objective-c line drawrect ios8

9
推荐指数
1
解决办法
539
查看次数