我有一组构成多边形形状的CGPoints,如何检测单个CGPoint是在多边形的内部还是外部?
比方说,形状是一个三角形,CGPoint正在向右移动,我怎么能检测到它何时越过三角线?
CGRectContainsPoint当形状是常规的4面形状时,我可以使用,但我看不出我会用奇怪的形状做到这一点.
我会尝试开发一个可以绘制平面测量的应用程序.因此,每个房间都有自己的ID或名称,如果我触摸房间,我想显示带有该ID或名称的Toast消息.问题是如何检查是否以及触及了哪条路径!!
我看到很多讨论这个问题的主题讨论.有人说使用getBounds方法,之后包含检查触摸点是否在Rect中的方法.但是,我猜getBounds方法返回包含路径的最小Rect,对吧?
因此,房间有不同的自定义几何形式,因此,如果我约束了2个关闭房间,方法可以返回一组共享点.坏!每个房间只有他们的面积点.我怎么解决这个问题 ?
在iOS中我可以使用PathContainsPoint方法,但不幸的是,Android Path没有类似的东西.
我希望有人可以提前帮助我
这个问题在这里已经有了答案:
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) 我需要一个免费的(开源)解决方案,给出lat/lng可以返回壁橱城市/州或邮编.mysql不是一个选项,如果可能的话,小型轻量级数据库将是最好的.
更新:没有网络服务,即使是最小的插件也会每天带来5000万次展示,因此添加服务请求会占用响应时间.我不希望在请求上添加超过200毫秒.
我在csv中有数据库,lat/lon/zip/city/state它只是如何存储,更重要的是如何最快地检索它.
如何判断两个三角形是否在2D欧几里德空间中相交?(即经典2D几何)给出每个三角形中每个顶点的(X,Y)坐标.
这个问题与以下内容有关:
但请注意,在大多数解决方案中都会完全掩盖一个有趣的子问题,即使有三个子案例,它们只会在重合的情况下返回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的数组:
我正在开发一个开源跟踪和地理围栏软件应用程序,并且在确定地理围栏的数学时遇到了一些困难.
我需要确定一个坐标是否存在于多边形内部.然而,棘手的部分是多边形没有设定数量的边.我需要能够计算五十面或五面.
我的研究表明,最简单的方法是取我的观点(我称之为x)和多边形之外的一个点(称之为y)并确定线((xx,xy),(yx,yy))是否与之相交多边形的边界.如果它相交奇数次,则点x必须在多边形内.
但是,知道这一点,我无法弄清楚如何在算法中表达这一点.我显然需要遍历构造多边形的各种线,但是检查确实让我无法理解.有人可以帮忙吗?请知道我不是必须要求解决方案.任何可以帮助我找到答案的东西都是一个巨大的帮助.
非常感激.
在过去的几个月里,我一直在自学PHP,PDO和SQL,并建立了一个基本的动态网站,其中包含用户注册/电子邮件激活/登录注销功能,遵循PHP/SQL最佳实践.现在我坚持下一个任务......
我创建了一个巨大的正方形/多边形数据集(300万+),每个纬度和经度的1分钟,存储在一个PHP数组中,有一组坐标(左上角).为了推断一个方形的形状,我只需向每个方向添加0.016度(~1分钟)并生成其他3个坐标.
我现在需要检查所述阵列中的每个多边形是否至少在美国的一部分土地上....即,如果要生成我完成的数据集的图形输出并查看圣弗朗西斯科海岸线,他们会看到类似这样.
它类似于多边形点问题,除了它处理另一个多边形而不是一个点,另一个多边形是一个国家边界,我不只是看交叉点.我想检查一下:
这用粗略绘制的图像说明:

如果它符合这三个条件中的任何一个,我想保留正方形.如果它无论如何都不与大多边形相互作用(即它在水面上),则丢弃它.
我以为大的多边形将是美国的shapefile,或者是一个KML文件,我可以从中删除坐标以创建一个非常复杂的多边形.
然后,我想我会将这些匹配的正方形和方形ID 传递给csv文件,以便集成到包含每个方块的一组坐标的MySQL表中(事实上,我甚至不确定处理表的最佳实践在MySQL中的那个大小,但我会在需要时得到它).最终目标是使用Google Maps API通过Javascript开发地图,在我正在编码的网站上的地图上显示这些方块(显然只显示视点内的方块,以确保我不会将我的数据库纳入死亡).我很确定我也必须首先通过PHP传递这些信息.但与实际制作所述数据集的任务相比,所有这些似乎都相对容易.
这显然是无法手工完成的,因此需要自动化.我知道一点Python,那会有帮助吗?关于从哪里开始的任何其他提示?有人愿意为我写一些代码吗?
我有一个基于图块的等距世界,我可以通过使用以下计算来计算特定(鼠标)坐标下面的哪个图块:
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实现.
geometry ×3
polygon ×3
algorithm ×2
math ×2
php ×2
.net ×1
android ×1
c ×1
c# ×1
cocoa ×1
contains ×1
dataset ×1
drawable ×1
gdi+ ×1
geolocation ×1
google-maps ×1
graphics ×1
intersection ×1
ios ×1
iphone ×1
isometric ×1
javascript ×1
mysql ×1
objective-c ×1
path ×1
pip ×1
point ×1
precision ×1