我试图找出最好的方法,我在上面绘制了一张Polygon
地图。由于Google Maps API
V2似乎没有在Polygon上进行触摸检测。我想知道是否可以检测接触点是否在多边形内部?如果是这样,那么,我的主要目标是在地图上勾画一个状态,当用户点击该状态时,它将在html" target="_blank">自定义视图中显示更多详细信息。到目前为止,我已经能够捕获MapOnClick
地图的,但是当用户在内点击时,Polygon
我想要polygon.getID()
上的地图Toast
。我是新手,如果我不太清楚,我深表歉意。
googleMap.setOnMapClickListener(new OnMapClickListener()
{
public void onMapClick(LatLng point)
{
boolean checkPoly = true;
Toast.makeText(MainActivity.this,"The Location is outside of the Area", Toast.LENGTH_LONG).show();
}
});
}
}
catch (Exception e) {
Log.e("APP","Failed", e);
}
好的,这是我到目前为止的半工作
private boolean rayCastIntersect(LatLng tap, LatLng vertA, LatLng vertB) {
double aY = vertA.latitude;
double bY = vertB.latitude;
double aX = vertA.longitude;
double bX = vertB.longitude;
double pY = tap.latitude;
double pX = tap.longitude;
if (aY > bY) {
aX = vertB.longitude;
aY = vertB.latitude;
bX = vertA.longitude;
bX = vertA.latitude;
}
System.out.println("aY: "+aY+" aX : "+aX);
System.out.println("bY: "+bY+" bX : "+bX);
if (pX < 0) pX += 360;
if (aX < 0) aX += 360;
if (bX < 0) bX += 360;
if (pY == aY || pY == bY) pY += 0.00000001;
if ((pY > bY || pY < aY) || (pX > Math.max(aX, bX))) return false;
if (pX < Math.min(aX, bX))
return true;
// }
double m = (aX != bX) ? ((bY - aY) / (bX - aX)) : aX;
double bee = (aX != pX) ? ((pY - aY) / (pX - aX)) : aX;
double x = (pY - bee) / m;
return x > pX;
}
}
我遇到的问题是在每个多边形的左侧都碰到触摸,直到到达另一个多边形为止。我的算法有什么问题会导致此问题?任何帮助,将不胜感激。
您要解决的问题是“ 多边形中点”测试。
为了帮助形象化射线投射的概念:
在一张纸上绘制一个多边形。然后,从任意随机点开始,在页面右侧绘制一条直线。如果线与多边形相交的次数是奇数次,则意味着起点在多边形内。
那么,如何在代码中做到这一点?
您的多边形由一系列顶点组成: ArrayList<Geopoint> vertices
。您需要Line Segment
单独查看每个对象,并查看它们是否Ray
相交
private boolean isPointInPolygon(Geopoint tap, ArrayList<Geopoint> vertices) {
int intersectCount = 0;
for(int j=0; j<vertices.size()-1; j++) {
if( rayCastIntersect(tap, vertices.get(j), vertices.get(j+1)) ) {
intersectCount++;
}
}
return (intersectCount%2) == 1); // odd = inside, even = outside;
}
private boolean rayCastIntersect(Geopoint tap, Geopoint vertA, Geopoint vertB) {
double aY = vertA.getLatitude();
double bY = vertB.getLatitude();
double aX = vertA.getLongitude();
double bX = vertB.getLongitude();
double pY = tap.getLatitude();
double pX = tap.getLongitude();
if ( (aY>pY && bY>pY) || (aY<pY && bY<pY) || (aX<pX && bX<pX) ) {
return false; // a and b can't both be above or below pt.y, and a or b must be east of pt.x
}
double m = (aY-bY) / (aX-bX); // Rise over run
double bee = (-aX) * m + aY; // y = mx + b
double x = (pY - bee) / m; // algebra is neat!
return x > pX;
}
本文向大家介绍sprite-kit 检测触摸,包括了sprite-kit 检测触摸的使用技巧和注意事项,需要的朋友参考一下 示例 您可以覆盖4种SKScene检测用户触摸的方法 请注意,每种方法都接收一个touches参数(在特定情况下),该参数可以包含一个以上的单个触摸事件。
多路触摸上包含多个触摸传感器,可以检测对应触点被触摸的状态. 当检测到对应触点被触摸时,触点对应的指示灯会亮起。同时你可以通过鳄鱼夹或导线,将触摸传感器上的触点引出,比如通过导线将触点与水果相连,这将大大扩宽该模块的应用场景。 该模块能够智能地调节阈值,每一次断电重启后,该模块都会重置阈值,确保触点连接各种导电材质后,依旧能够灵敏的检测触摸事件。你还可以使用软件中的编程积木进一步调节触摸传感器的灵
多路触摸上包含多个触摸传感器,可以检测对应触点被触摸的状态,当检测到对应触点被触摸时,触点对应的指示灯会亮起。同时你可以通过鳄鱼夹或导线,将触摸传感器上的触点引出,比如通过导线将触点与水果相连,这将大大扩宽该模块的应用场景。 该模块能够智能地调节阈值,每一次断电重启后,该模块都会重置阈值,确保触点连接各种导电材质后,依旧能够灵敏的检测触摸事件。你还可以使用软件中的编程积木进一步调节触摸传感器的灵敏
所以我试图用pygame制作一个我们之间的游戏。我刚刚开始,所以我没有太多东西,现在正在制作地图。然而,我正在努力解决的一件事是碰撞逻辑。地图目前有一个细长的八边形形状,但是我想不管是什么形状,我都会使用类似pygame多边形的东西。当我运行我现在的代码时,它会检查我的玩家(pygame矩形)和墙壁(pygame多边形)之间的碰撞,它说: 我发现这是因为pygame多边形返回了一个矩形,但在碰撞检
问题内容: 在Javascript / jQuery中,如何检测客户端设备是否有鼠标? 我有一个网站,当用户将鼠标悬停在某个项目上时,该网站会在信息面板上向上滑动。我正在使用jQuery.hoverIntent来检测悬停,但这显然不适用于iPhone/ iPad / Android等触摸屏设备。因此,在这些设备上,我想还原为点按以显示信息面板。 问题答案: +1,两者兼而有之。另一种方法是使用CS
问题内容: 我试图检测我的sprite节点是否已被触摸并且我不知道从哪里开始。 问题答案: 首先将的属性设置为字符串。 然后在功能上 这是一种方法。 您也可以继承并覆盖其中的内部。 然后做