我正在尝试在多边形算法中创建一个快速 2D点,用于命中测试(例如Polygon.contains(p:Point)).对于有效技术的建议将不胜感激.
graphics performance polygon collision-detection point-in-polygon
前几天我用Java编写了一个类来计算a point(X,Y)是否在多边形内部.(X和Y是double的,因为将地理坐标).
我知道,Java有类Polygon,但我不得不使用Path2D和Point2D,因为Polygon不允许double的,只是整数:(
一旦我完成了多边形Path2D,我就使用了方法contains(Path2D有了它),我的问题就解决了.
但现在,我想导入到Android,问题出在这里,因为Path2D需要导入:
import java.awt.geom.Path2D;
import java.awt.geom.Point2D;
Run Code Online (Sandbox Code Playgroud)
并且在Android中不存在awt,所以我无法使用.
那么,有没有类似于Path2D那种contains方法的类?或者我必须自己计算?
以下是我在Java中使用的方法Path2D:
private void ConstructPolygon(Vector<Point2D> coodinates)
{
this.polygon.moveTo(coodinates.get(0).getX(), coodinates.get(0).getY());
//System.out.println(coodinates.get(0).getX() + " " + coodinates.get(0).getY());
//System.out.println("asda");
for(int i = 1; i < this.num_points; i++)
{
//System.out.println(coodinates.get(i).getX() + " " + coodinates.get(i).getY());
this.polygon.lineTo(coodinates.get(i).getX(), coodinates.get(i).getY());
}
this.polygon.closePath();
}
public boolean InsideCity(Point2D …Run Code Online (Sandbox Code Playgroud) 他们是否有理由决定不在Android中添加contains方法(针对Path)?
我想知道我在Path中有什么观点,并希望它比在这里看到的更容易:
我是否更好地创建一个ArrayList并将整数添加到数组中?(我只在控制声明中检查一次点数)即.if(myPath.contains(x,y)
到目前为止,我的选择是:
我只是在寻找最有效的方法
我有一个画布,我设置了一条路径
Path path = new Path();
path.moveTo(1, 1);
path.lineTo(90, 1);
path.lineTo(90, 60);
path.lineTo(1, 60);
canvas.drawPath(path,p);
Run Code Online (Sandbox Code Playgroud)
现在我想向这个路径对象实现一个触摸侦听器.
我在自定义ImageView上实现了缩放选项,并在此自定义ImageView的onDraw方法的画布上绘制了这些线条.所以我不能通过检查用户触摸的坐标来做到这一点.
我知道路径对象不是View Class的子节点,因此我无法在其中实现touchListner.但我真正需要的是类似的东西
path.setOnTouchListener(myTouchListner);
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何实现它?任何帮助表示赞赏.