see (6) in https://users.cs.utah.edu/~ladislav/jacobson13robust/jacobson13robust.pdf
| 10 | |
| 11 | /// see (6) in https://users.cs.utah.edu/~ladislav/jacobson13robust/jacobson13robust.pdf |
| 12 | static float triangleSolidAngle( const Vector3f & p, const Triangle3f & tri ) |
| 13 | { |
| 14 | Matrix3f m; |
| 15 | m.x = tri[0] - p; |
| 16 | m.y = tri[1] - p; |
| 17 | m.z = tri[2] - p; |
| 18 | auto x = m.x.length(); |
| 19 | auto y = m.y.length(); |
| 20 | auto z = m.z.length(); |
| 21 | auto den = x * y * z + dot( m.x, m.y ) * z + dot( m.y, m.z ) * x + dot( m.z, m.x ) * y; |
| 22 | return 2 * std::atan2( m.det(), den ); |
| 23 | } |
| 24 | |
| 25 | TEST(MRMesh, TriangleSolidAngle) |
| 26 | { |