我有一个正方形,为简单起见,假设左下角位于原点,正方形的宽度为 1。
一条射线将正方形分成两部分。我有交点的坐标。p1
我想从to获得向量右侧的区域p2
:
现在我有 16 个if
语句检查 2 个点的每个组合并相应地计算面积。看起来很糟糕。有没有更聪明的方法来做到这一点?
我有一个正方形,为简单起见,假设左下角位于原点,正方形的宽度为 1。
一条射线将正方形分成两部分。我有交点的坐标。p1
我想从to获得向量右侧的区域p2
:
现在我有 16 个if
语句检查 2 个点的每个组合并相应地计算面积。看起来很糟糕。有没有更聪明的方法来做到这一点?
调用点A和B而不是 p 1和 p 2。按照惯例,我假设 x 向右增加,y 向上增加。
点A的坐标(x 或 y)必须为 0 或 1。旋转正方形(实际上只是两个点)使其 x=0。
点B可能在 x=-1,在这种情况下,面积为 1-(A y +B y )/2。
或者B可能在 y=0,面积 = 1+(A y B x )/2
或者B可能在 y=1,面积 = (A y -1)B x /2
此解决方案假设 p1 和 p2 形成一个直角三角形,如阴影区域所示:
向量右侧的面积 = (w * w) - (0.5 * p1 * p2) 其中 w 是正方形的宽度,0 <= p1 <= w,0 <= p2 <= w。
例如,如果 w = 1、p1 = 0.5 和 p2 = 0.75,则面积 = (1 * 1) - (0.5 * 0.5 * 0.75) = 0.8125