Unity/C# 添加两个向量表示的两个区域

Unity/C# Adding two areas represented by two vectors

我有两个区域,里面都给出了bounds.size。现在 z 轴对我来说无关紧要,因为我在 2D 中工作。我想添加这些矢量,所以我有一个代表关节区域的矢量。简单地以正常方式添加这些向量是行不通的。该区域最终看起来的样子并不重要,重要的是两个区域的大小相同。

编辑:我有两个多边形碰撞器的 bounds.size,我想获得一个值,该值表示两个多边形碰撞器的组合 bounds.size

区域1和区域2合并

The way the area looks in the end is not important, its just important that the size is the same as, both areas combined.

因为除此之外还有几乎无限的可能性,我将把自己限制在 x = y 的结果,原因很简单,你不会得到像 (0.5,80000) 这样愚蠢的向量,但是而是更平衡的 (200,200).

从代数的角度来看,这并不难:

float result_area = first_area + second_area;

计算面积很简单:

float area = myVector.X * myVector.Y;

因此面积总和也很容易:

float result_area = myFirstVector.X * myFirstVector.Y + mySecondVector.X * mySecondVector.Y;

为了举例,我们假设 first_area = 50second_area = 350,结果是 result_area = 400

由于我们仅限于 x = y 的结果,因此结果是面积的 平方根

float theSquareRoot = Math.Sqrt(result_area);
myResultVector.X = theSquareRoot;
myResultVector.Y = theSquareRoot;

正如我所说,还有许多其他可能的结果向量。对于其他情况,您要么必须定义一个给定的比率(例如,对于同一示例,1 : 4 的比率会给您 (10,40)),但计算有点困难,您提到无论如何你都不关心确切的形状。

您也可以只创建一个向量,其中 X = result_areaY = 1(反之亦然),而无需计算平方根。


请注意,您过度设计了它。物体的面积是一个一维值(一个数字);但是您使用二维值(数字对)来表示它们。
由于您不关心特定的 X/Y 值,只关心它们的乘积,我建议您尽可能避免使用向量,这样就不会不必要地复杂化。