共面矩形与直线相交所得分割段面积的三角函数求解方法
矩形被平面内直线分割的单侧面积无交点计算方法
你预期的无需求解交点的通用闭式公式确实存在,全程仅通过基础三角函数和算术运算即可得到结果,完全适配无线性代数模块的运行环境。
参数约定
所有参数均可直接通过几何关系测量/计算得到,不需要坐标求解,完全匹配你提到的A1 = f(d,r,u,c)函数入参形式:
r、u对应矩形两个正交邻边的方向与长度,取半长分别为w、h(即矩形沿r方向全长为2w、沿u方向全长为2h,直接用全长代入的话对应调整系数即可)d为待计算面积的一侧对应的直线法向量方向为正方向时,矩形几何中心到直线的垂直带符号距离- 直线法向量与r方向的夹角为
θ,可通过三角函数直接得到sinθ、cosθ值 c为中心偏移修正量,已整合到带符号距离d的计算中,不需要额外单独计算
分场景闭式公式
先利用矩形对称性做预处理:将θ的取值归一化到[0, π/2]区间,同时对sinθ、cosθ取绝对值,仅通过4个分支判断即可覆盖所有直线位置、朝向的场景:
- 当
d >= w*cosθ + h*sinθ:直线完全落在矩形待计算侧的反方向,待求面积为0 - 当
d <= -(w*cosθ + h*sinθ):直线完全落在矩形待计算侧的外侧,待求面积为矩形总面积4*w*h - 当直线与矩形存在交线时,先计算两个中间阈值:
- 矩形沿法向量方向的最大半跨度:
s = w*cosθ + h*sinθ - 邻边切割切换阈值:
t = abs(w*cosθ - h*sinθ)
再按距离区间匹配公式: - 若
abs(d) <= t:直线穿过矩形的一组平行对边,待求区域为直角梯形/矩形,面积为2*w*h*(1 + d/s) - 若
t < d < s:直线穿过矩形相邻的两条边,待求区域为直角三角形,面积为(s - d)*(s - d)/(2*sinθ*cosθ) - 若
-s < d < -t:直线穿过矩形相邻的两条边,待求区域为矩形切去一个小直角三角形的多边形,面积为4*w*h - (s + d)*(s + d)/(2*sinθ*cosθ)
- 矩形沿法向量方向的最大半跨度:
实现提示
- 全程运算仅涉及加减乘除、绝对值、最值判断、正弦余弦计算,没有矩阵运算、没有交点求解步骤,代码实现门槛极低
- 角度归一化不需要复杂变换:对任意朝向的直线,只需要把夹角对
π/2取余,再把结果映射到0到90度区间即可,靠距离的符号就能覆盖所有朝向的计算 - 若需要计算直线另一侧的面积,直接把
d取反代入公式,用矩形总面积减去当前结果即可做校验
内容的提问来源于stack exchange,提问作者flynn hack
相关产品推荐
相关产品推荐

