相关疑难解决方法(0)

检测多边形内是否有CGPoint

我有一组构成多边形形状的CGPoints,如何检测单个CGPoint是在多边形的内部还是外部?

比方说,形状是一个三角形,CGPoint正在向右移动,我怎么能检测到它何时越过三角线?

CGRectContainsPoint当形状是常规的4面形状时,我可以使用,但我看不出我会用奇怪的形状做到这一点.

iphone cocoa objective-c quartz-graphics ios

19
推荐指数
1
解决办法
6878
查看次数

Android:如何检查路径是否包含触摸点?

我会尝试开发一个可以绘制平面测量的应用程序.因此,每个房间都有自己的ID名称,如果我触摸房间,我想显示带有该ID或名称的Toast消息.问题是如何检查是否以及触及了哪条路径!!

我看到很多讨论这个问题的主题讨论.有人说使用getBounds方法,之后包含检查触摸点是否在Rect中的方法.但是,我猜getBounds方法返回包含路径的最小Rect,对吧?

因此,房间有不同的自定义几何形式,因此,如果我约束了2个关闭房间,方法可以返回一组共享点.坏!每个房间只有他们的面积点.我怎么解决这个问题 ?

在iOS中我可以使用PathContainsPoint方法,但不幸的是,Android Path没有类似的东西.

我希望有人可以提前帮助我

android contains path drawable android-canvas

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

如何检查点(x,y)是否在笛卡尔坐标系中的多边形内?

这个问题在这里已经有了答案:
Point in Polygon aka hit test
C#Point in polygon

给定在笛卡尔坐标系中用N线方程组成的随机多边形,是否有任何标准公式用于检查点(x,y)的隶属度?

简单的解决办法是让所有的线公式和检查点X这条线之下,高于线和其他线路,等权但这可能会是乏味的.

我应该注意,多边形可以是任何形状,具有任意数量的边,并且可以是凹的或凸的.

为方便起见,我已经添加了这些实用功能:

float slope(CGPoint p1, CGPoint p2)
{
    return (p2.y - p1.y) / (p2.x - p1.x);
}

CGPoint pointOnLineWithY(CGPoint p, float m, float y)
{
    float x = (y - p.y)/m + p.x;
    return CGPointMake(x,y);
}

CGPoint pointOnLineWithX(CGPoint p, float m, float x)
{
    float y = m*(x - p.x) + p.y;
    return CGPointMake(x, y);
}
Run Code Online (Sandbox Code Playgroud)

c algorithm math polygon computational-geometry

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

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

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

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

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

algorithm geolocation

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

指向Polygon算法有时会产生错误的结果

我在StackOverflow上看到了我在PHP代码中实现的"多边形点"光线跟踪算法.大多数情况下,它运作良好,但在一些复杂的情况下,复杂的多边形和恶性点,它会失败,并且它表示不是多边形时的点.

例如:
您将在此处找到我的Polygon和Point类:pointInPolygon方法位于Polygon类中.在文件的末尾,有两个点应该位于给定的多边形内(Google地球上为True).第二个很好,但第一个是马车:(.

您可以使用此KML文件轻松检查Google地球上的多边形.

php precision pip point polygon

10
推荐指数
1
解决办法
6250
查看次数

检测三角形 - 三角形交叉点的最有效方法是什么?

如何判断两个三角形是否在2D欧几里德空间中相交?(即经典2D几何)给出每个三角形中每个顶点的(X,Y)坐标.

math geometry mathematical-optimization

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

检测两个重合线段的重合子集

这个问题与以下内容有关:

但请注意,在大多数解决方案中都会完全掩盖一个有趣的子问题,即使有三个子案例,它们只会在重合的情况下返回null:

  • 巧合,但不重叠
  • 触摸只是点和巧合
  • 重叠/重合线子段

例如,我们可以像这样设计一个C#函数:

public static PointF[] Intersection(PointF a1, PointF a2, PointF b1, PointF b2)
Run Code Online (Sandbox Code Playgroud)

其中(a1,a2)是一个线段而(b1,b2)是另一个.

此功能需要涵盖大多数实现或解释掩盖的所有奇怪情况.为了解释重合线的奇怪性,该函数可以返回PointF的数组:

  • 如果线条平行或不相交(无限线相交但线段不相交,或线条平行),则为零结果点(或null )
  • 一个结果点(包含交叉点位置)如果它们相交或者它们在一个点上重合
  • 如果两条线重合,则两个结果点(对于线段的重叠部分)

.net c# graphics geometry gdi+

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

确定坐标是否存在于多边形内部

我正在开发一个开源跟踪和地理围栏软件应用程序,并且在确定地理围栏的数学时遇到了一些困难.

我需要确定一个坐标是否存在于多边形内部.然而,棘手的部分是多边形没有设定数量的边.我需要能够计算五十面或五面.

我的研究表明,最简单的方法是取我的观点(我称之为x)和多边形之外的一个点(称之为y)并确定线((xx,xy),(yx,yy))是否与之相交多边形的边界.如果它相交奇数次,则点x必须在多边形内.

但是,知道这一点,我无法弄清楚如何在算法中表达这一点.我显然需要遍历构造多边形的各种线,但是检查确实让我无法理解.有人可以帮忙吗?请知道我不是必须要求解决方案.任何可以帮助我找到答案的东西都是一个巨大的帮助.

非常感激.

geometry intersection polygon

8
推荐指数
1
解决办法
7137
查看次数

创建数据集以便最终集成到网站的MySQL和Google Maps API中?(la多边形点,碰撞定理等)

在过去的几个月里,我一直在自学PHP,PDO和SQL,并建立了一个基本的动态网站,其中包含用户注册/电子邮件激活/登录注销功能,遵循PHP/SQL最佳实践.现在我坚持下一个任务......

我创建了一个巨大的正方形/多边形数据集(300万+),每个纬度和经度的1分钟,存储在一个PHP数组中,有一组坐标(左上角).为了推断一个方形的形状,我只需向每个方向添加0.016度(~1分钟)并生成其他3个坐标.

我现在需要检查所述阵列中的每个多边形是否至少在美国的一部分土地上....即,如果要生成我完成的数据集的图形输出并查看圣弗朗西斯科海岸线,他们会看到类似这样.

它类似于多边形点问题,除了它处理另一个多边形而不是一个点,另一个多边形是一个国家边界,我不只是看交叉点.我想检查一下:

  • 多边形/正方形与多边形相交.(想想海岸线/边境).
  • 多边形/正方形位于多边形内.(想想美国大陆).
  • 多边形/正方形包含多边形的一部分.(想想小岛).

这用粗略绘制的图像说明:

这不容易!

如果它符合这三个条件中的任何一个,我想保留正方形.如果它无论如何都不与大多边形相互作用(即它在水面上),则丢弃它.

我以为大的多边形将是美国的shapefile,或者是一个KML文件,我可以从中删除坐标以创建一个非常复杂的多边形.

然后,我想我会将这些匹配的正方形和方形ID 传递给csv文件,以便集成到包含每个方块的一组坐标的MySQL表中(事实上,我甚至不确定处理表的最佳实践在MySQL中的那个大小,但我会在需要时得到它).最终目标是使用Google Maps API通过Javascript开发地图,在我正在编码的网站上的地图上显示这些方块(显然只显示视点内的方块,以确保我不会将我的数据库纳入死亡).我很确定我也必须首先通过PHP传递这些信息.但与实际制作所述数据集的任务相比,所有这些似乎都相对容易.

这显然是无法手工完成的,因此需要自动化.我知道一点Python,那会有帮助吗?关于从哪里开始的任何其他提示?有人愿意为我写一些代码吗?

php mysql google-maps dataset point-in-polygon

8
推荐指数
1
解决办法
666
查看次数

如何计算等距世界中鼠标下方的图块索引,同时考虑图块高程

我有一个基于图块的等距世界,我可以通过使用以下计算来计算特定(鼠标)坐标下面的哪个图块:

function isoTo2D(pt:Point):Point{
  var tempPt:Point = new Point(0, 0);
  tempPt.x = (2 * pt.y + pt.x) / 2;
  tempPt.y = (2 * pt.y - pt.x) / 2;
  return(tempPt);
}

function getTileCoordinates(pt:Point, tileHeight:Number):Point{
  var tempPt:Point = new Point(0, 0);
  tempPt.x = Math.floor(pt.x / tileHeight);
  tempPt.y = Math.floor(pt.y / tileHeight);
  return(tempPt);
}
Run Code Online (Sandbox Code Playgroud)

(摘自http://gamedevelopment.tutsplus.com/tutorials/creating-isometric-worlds-a-primer-for-game-developers--gamedev-6511,这是一个flash实现,但数学是相同的)

但是,当我的瓷砖具有不同的高程水平时,我的问题就出现了: 在此输入图像描述

在此输入图像描述

在这些情况下,由于一些具有较高高度的瓷砖的高度,后面的瓷砖(或瓷砖的一部分)被遮盖并且不应该由鼠标选择,而是选择前面的瓷砖它的.如何在考虑到瓷砖高度的情况下通过鼠标坐标计算瓷砖?

我正在使用javascript和canvas实现.

javascript isometric

8
推荐指数
1
解决办法
892
查看次数