.NET屏幕对象触摸检测
答
快速N”肮脏的方法是检查边界矩形:
if (a.left <= b.right && b.left <= a.right &&
a.top <= b.bottom && b.top <= a.bottom)
如果您想对涉及transparancy东西像素完善的检测,它就会变得更复杂了。
答
最快的方法是将每个对象视为一个圆,其半径通常接近其周长,中心的X,Y坐标对。然后计算两个物体中心之间的距离,并将其与它们的半径之和进行比较。如果它们的半径之和大于它们的中心之间的距离,则它们是触摸的。
+1
只需添加:您可以通过比较距离平方和半径总和的平方来加速圆形碰撞检测 - 因为您不需要知道实际距离(仅限于是否大于或小于某个值),您可以通过省略昂贵的平方根节省一点时间。 –
答
将它们视为矩形,可以考虑获取每个图像的每个点的坐标。然后检查每个点是否大于另一个图像中的另一个点(点)。
类似:
/// each point represent the points in the images
Point ImageAUpperLeft;
Point ImageAUpperRight;
Point ImageALowerLeft;
Point ImageALowerRight;
Point ImageBUpperLeft;
Point ImageBUpperRight;
Point ImageBLowerLeft;
Point ImageBLowerRight;
Point[] PtsList = new Point[] { ImageAUpperLeft, ImageAUpperRight, ImageALowerLeft, ImageALowerRight, ImageBUpperLeft, ImageBUpperRight, ImageBLowerLeft, ImageBLowerRight };
/// perform checking here, like:
if (ImageAUpperLeft coincides with ImageBUpperLeft) || (... so on so forth
我想你知道的算法来继续这一个,但如果仍然心不是清楚你仍然可以在这里发表您的问题作为意见。将很乐意帮助... :)
酷!你知道我在哪里可以找到你正在谈论的像素检测的东西,只是出于兴趣? –
CodeProject上有一个简单的例子:http://www.codeproject.com/KB/game/collision3.aspx –