android中的路径交集

V I*_*S H 5 java graphics android path android-gesture

我在我的android代码中有2个路径对象.我一直试图检查天气这些路径是否相交,但是无法做到.如何检查天气路径是否相交.感谢任何好的回应.....谢谢,

Ste*_*non 7

Dheeraj给出的答案可以回答你的问题:

/sf/answers/694318131/

这是他的回答的复制和粘贴:

我能想到的另一种方法是使用可以使用Paths构造的简单对象.

一旦有两个对象的边界由路径表示,您可以尝试这样做:

Path path1 = new Path();
path1.addCircle(10, 10, 4, Path.Direction.CW);
Path path2 = new Path();
path2.addCircle(15, 15, 8, Path.Direction.CW);

Region region1 = new Region();
region1.setPath(path1, clip);
Region region2 = new Region();
region2.setPath(path2, clip);

if (!region1.quickReject(region2) && region1.op(region2, Region.Op.INTERSECT)) {
    // Collision!
}
Run Code Online (Sandbox Code Playgroud)

将对象作为路径后,可以使用drawPath()直接绘制它们.您还可以通过transform()路径执行移动.

根据我的理解,上面代码中的变量"clip"应该是路径的边界框.出于一般目的,我使用

Region clip = new Region(0, 0, layoutWidth, layoutHeight);
Run Code Online (Sandbox Code Playgroud)

布局宽度和高度可以是画布或活动的大小或其他.


S.D*_*.D. 6

从API 19开始,Path现在有了一种op()方法.

boolean intersects = path.op(p1,p2,Path.Op.INTERSECT)
Run Code Online (Sandbox Code Playgroud)

  • 返回值指示操作是否成功,而不是指示它们是否相交。要检查交集,您需要查看结果是否为Empty()。它与封闭区域相交,而不是路径本身。快速测试:构造一个角度多段线作为路径,然后在该角度之内而不是与之交叉的一条直线路径。与它们相交,看看。 (2认同)
  • @SevaAlekseyev与Paint.getFillPath(路径src,路径dst)结合使用,并设置了描边绘画,这也适用于非填充路径。 (2认同)

Dir*_*irk 5

看看Region.op

我还没有尝试过,但我建议使用:

Region.setPath(Path path, Region clip);
Run Code Online (Sandbox Code Playgroud)

要从您的两条路径中获取一个区域,然后您可以使用:

if (region1.op(region2,Region.Op.INTERSECT)) {
  // intersection
}
Run Code Online (Sandbox Code Playgroud)

检查交叉点...

  • 不,它不仅创建一个包含路径的矩形。看看文档:“这会产生一个与路径绘制的像素相同的区域(没有抗锯齿)。” (4认同)