如何判断一个物体是否在四个点的内部

3

(我再问一遍) 你好,我有一个小问题,我写了一个简单的脚本来检测蓝色钻石是否在四个球体内(见下图),而且它也很有效,但是当我旋转四个球体90度时,我不知道如何使其仍然能够检测到里面。我认为我必须使用TransformDirection,但我不知道在哪里实现它,这是脚本:https://hastebin.com/perevejoku.cs

以下是我所说的可视化效果: enter image description here 这是我所说的旋转图像: enter image description here 我认为这可能会对我有帮助,但是我不知道如何实现它:https://math.stackexchange.com/questions/190111/how-to-check-if-a-point-is-inside-a-rectangle


“将四个球体旋转90度”是什么意思?是从它们的原点旋转还是从中心点(蓝色钻石)旋转?您能提供一张图片吗? - Thalthanas
对我来说,从图像中仍然很难理解,但是您需要将蓝色钻石放在球体内并面向某个方向,以使您的条件成功吗?或者蓝色钻石只需要位于球体的中点? - Thalthanas
@Thalthanas 我想让脚本检测蓝色钻石是否在这四个球体的某个位置(https://imgur.com/a/0nbUz),我编写了一个简单的脚本来实现这一点,(https://hastebin.com/perevejoku.cs),但是当你旋转它时,就像图片中一样,它不起作用,它只检测蓝色球体是否在相同的X轴上,而应该检测它是否在Z轴上,因为它被旋转了。 - Sinci1
现在看起来更清晰了。如果球体的位置是固定的,就像你的情况下的正方形(旋转无关紧要),无论你如何旋转它,正方形的形状都会保持不变。因此,您可以使用碰撞器。将一个空的gameObject添加为其中一个球体的子对象,并向其添加一个盒子碰撞器。调整其属性,使碰撞器覆盖球体之间的区域。之后,您可以使用OnCollisionEnter()OnTriggerEnter()检查钻石是否在该区域内。 - Thalthanas
也许你应该将世界位置转换为屏幕空间,这样你就不必担心第三个维度了。 - Minzkraut
显示剩余3条评论
1个回答

3

将向量AP在以向量ABACABxAC(叉积)为基的空间中分解,其中P是钻石坐标,B、A、C是三个相邻的球的坐标。

如果该基底中的坐标t、u、w满足以下条件:

 t in range 0..1
 u in range 0..1
 w is 0

那么点P位于由球形围成的矩形平面内,并位于矩形边界内。

AP.x = P.x - A.x //same for y,z
//same for AB, AC
Normal = CrossProduct(AB, AC)

system of linear equation for unknowns t,u,w:
t * AB.x + u * AC.x + w * N.x = AP.x
t * AB.y + u * AC.y + w * N.y = AP.y
t * AB.z + u * AC.z + w * N.z = AP.z

我对此并不是很了解,您能否提供一个更简单的解释或一些基本代码来帮助我入门? - Sinci1
如果你要处理2D或3D图形,那么现在是学习向量代数的时候了。我提供了一些基本公式,但我相信Unity包含向量减法、叉积等功能。 - MBo
@Sinci1 我推荐观看3Blue1Brown线性代数精髓视频 - Theraot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接