ok I have found how the weights are computed. The article above slice the surface of the sphere by moving a plane, generating concentric rings.
another way follow the picture below:
View attachment 76774
And a third way is by intersecting 2 lunes, which is what they chooses.
if alpha and beta are two angles that defines the quadrangle, then. The area
is given by:
def areaQ(alpha_d, beta_d):
alpha = alpha_d * 2 * math.pi / 360
beta = beta_d * 2 * math.pi /360
gamma = math.acos(math.cos(alpha)*math.cos(beta))
A = math.atan(math.sin(beta)/math.tan(alpha))
B = math.atan(math.sin(alpha)/math.tan(beta))
C = math.acos(-math.cos(A)*math.cos(B)+math.sin(A)*math.sin(B)*math.cos(gamma))
S = (4*C-2*math.pi)
#print('gamma {} A {} B {} C {} S {}'.format(
# gamma*360/2/math.pi, A*360/2/math.pi, B*360/2/math.pi, C*360/2/math.pi, S))
return S
for the weights, they start at 0,0 with alpha=5 and beta=5
the next one is alpha=15, beta=15 (minus the first one);
a = [i*10+5 for i in range(0,9)] + [90]
wa = [areaQ(i, i) for i in a]
w = [wa[0]] + [wa
-wa[i-1] for i in range (1,len(wa))]
w[9] *= 2
ws = np.linalg.norm(w)
w /= ws/0.047133397655733274
print(w)
which gives the weights from the standard from 0 to 90 degrees, after they are periodic.
[0.00060449 0.00473019 0.00895503 0.01238735 0.01498961 0.01686815 0.01816596 0.01900674 0.01947779 0.01962937]
almost done.
I still need to figure out why 0.047xx for normalizing And why x2 for 90degree. I have learnt plenty on spherical excess and other funny relations on a sphere which are known for a long time. If I was not on my iPad I would add some pictures of drawing that helps to understand alpha, beta and the various trigonometric equations.