INTERFACE SPIntegral; IMPORT SPTriang; TYPE Point = SPTriang.Coords; Triangle = ARRAY[0..2] OF Point; Function = PROCEDURE (READONLY p: Point): LONGREAL; PROCEDURE OnTriangle( READONLY u, v, w: Point; func: Function; order: CARDINAL := LAST(CARDINAL); ): LONGREAL; (* Computes the integral of function "func" over the spherical triangle with corners "p,q,r", using subdivision into "4^order" subtriangles and Gaussian qudrature of order 5 (error "O(h^6)") on each part. *) PROCEDURE OnTwoTriangles( READONLY pa, qa, ra: Point; READONLY pb, qb, rb: Point; func: Function; order: CARDINAL := LAST(CARDINAL); ): LONGREAL; (* Decomposes the intersection of triangles "pa,qa,ra" and "pb,qb,rb" into zero or more triangles, and calls "OnTriangle" on each of them. *) END SPIntegral.