gpt4 book ai didi

java - 忽略透明部分的图像的 2D 碰撞检测

转载 作者:行者123 更新时间:2023-12-01 15:14:35 24 4
gpt4 key购买 nike

所以我决定查找一些碰撞检测,但我一直无法找到正确的信息关于两个图像之间的二维碰撞检测,包括如何正确避免检测透明图像图像的区域,但我确实找到了一篇我自己附加的帖子,但问题是我没有我真的理解这篇文章,也不明白他为什么要做这些事情......

这是有问题的帖子:https://stackoverflow.com/posts/336615/revisions

所以首先我想问这个解决方案是否实际上是一个好的/正确的,或者我是否应该看看其他地方。

其次,我想知道,在他的帖子中,他提到使用整数数组,而不是二维数组,设置 1 和 0 来决定像素是否透明,但我真的不知道我应该怎么做为了达成这个。起初我以为只要形成一串1和0并将其转换为Long就可以实现但即使图像宽度仅为 25,Long 也会变得...太长...

我也尝试过,但没有成功,因为代码无法使用此数组:

 long[] array = new long[30*30]; // height * width of the image
int x = 0;
int y = 0;

for(int i = 0; i<30*30; i++){
if(image.getRGB(x,y) == 0){
array[i] = 0;
}
else{ array[i] = 1; }

x++;
if (x==30){
y++;
x=0;
}
}

第三,我希望有人能够解释整个过程以及为什么他所做的事情是必要的。顺便说一句,我确实知道那些位运算符是如何工作的!换句话说,我不明白他做代码中所有事情的思路/动机,我想了解这一切!

我现在真的不知道如何继续,呵呵...

最佳答案

bitwise AND operation的结果(&) 对于每个位,如果两个操作数中的相应位都为 true,则为 true (1),否则为 false (0)。

他使用的想法是创建图像的一个版本(掩模),其中原始图像中的每个非透明像素存储为“1”位,每个透明像素存储为“0”位。这些被打包成一个整数,可以通过单个 AND 操作针对另一图像的掩码进行测试(在 AND 之前,他计算两个图像之间的水平距离,并在必要时移动其中一个掩码)。

例如,假设我们有以下两个 4x1 像素图像:

5, 0, 0, 5
8, 8, 8, 8

尽管出于实用目的,我将它们放在不同的行上,但您应该将它们视为位于同一行,因此左图像的最后两个像素与右图像的前两个像素重叠。

以二进制表示形式查看时,行的掩码为:

1001
1111

左右图像之间的距离为-2,因此我们将第一个掩模向左移动2位:

1001 << 2 => 100100

现在我们有了这些面具:

100100
001111

对这些进行 AND 运算可以得到:

000100

非零结果告诉我们发生了碰撞。

关于java - 忽略透明部分的图像的 2D 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com