Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET屏幕对象触摸检测_C#_.net_Winforms - Fatal编程技术网

C# .NET屏幕对象触摸检测

C# .NET屏幕对象触摸检测,c#,.net,winforms,C#,.net,Winforms,如果屏幕(窗体)上的两个图像在C#中相互接触,我们将如何检测 我有一个小游戏,我必须找出两个物体(物体的图像)是否相互接触 有没有一种简单的方法来实现这一点?最快的方法是将每个对象视为一个圆,其半径通常接近其周长,且其中心有一个X、Y坐标对。然后计算两个对象中心之间的距离,并将其与半径之和进行比较。如果它们的半径之和大于中心之间的距离,则它们是接触的。最快的方法是将每个对象视为一个圆,其半径通常接近其周长,且其中心有一个X、Y坐标对。然后计算两个对象中心之间的距离,并将其与半径之和进行比较。如果

如果屏幕(窗体)上的两个图像在C#中相互接触,我们将如何检测

我有一个小游戏,我必须找出两个物体(物体的图像)是否相互接触


有没有一种简单的方法来实现这一点?

最快的方法是将每个对象视为一个圆,其半径通常接近其周长,且其中心有一个X、Y坐标对。然后计算两个对象中心之间的距离,并将其与半径之和进行比较。如果它们的半径之和大于中心之间的距离,则它们是接触的。

最快的方法是将每个对象视为一个圆,其半径通常接近其周长,且其中心有一个X、Y坐标对。然后计算两个对象中心之间的距离,并将其与半径之和进行比较。如果它们的半径之和大于它们中心之间的距离,则它们是接触的。

快速脏方法是检查边界矩形:

if (a.left <= b.right && b.left <= a.right &&
    a.top <= b.bottom && b.top <= a.bottom)

if(a.left快速脏方法是检查边界矩形:

if (a.left <= b.right && b.left <= a.right &&
    a.top <= b.bottom && b.top <= a.bottom)

<代码>如果(左)P>将它们视为矩形,则可以考虑获取每个图像的每个点的点坐标,然后检查每个点是否大于另一个图像的点(点)。 比如:

/// 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

<>我想你知道算法继续下去,但如果还不清楚,你仍然可以把你的问题作为评论发表在这里。很乐意帮助……:

< P>把它们当作矩形,你可以考虑得到每个图像的每个点的点坐标。然后检查每一个点,如果一个大于另一个点(点)。从另一个图像

比如:

/// 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的快速示例:酷!你知道我在哪里可以找到你所说的像素检测,只是出于兴趣吗?这里有一个关于CodeProject的快速示例: