如何计算由点和多边形定义的立体角?

How to calculate a solid angle defined by a point and a polygon?

让我们定义一个坐标 Xo, Yo, Zo 的点 O 和一个坐标 (Xa,Ya,Za), (Xb,Yb,Zb), (Xc,Yc,Zc), (Xd,Yd,Z)

的多边形 ABCD

计算多面体 ABCDO 定义的立体角 Ω 的最常用算法是什么?

谢谢

比较简单的方法就是把这个金字塔分成两个四面体(比如用普通对角线AC,如果ABCD是凸的),然后计算每个四面体的立体角

Ω  = 2 * ArcTan(Dot(u1 X u2, u3) /(1 + Dot(u2,u3) + Dot(u1,u2) + Dot(u1,u3)))

其中 u1, u2, u3 - 从 OA, B, C 点的归一化(单位)向量(对于第一个四面体)

Wiki

中查看此方法可能存在的问题