You can use approach described in my answer in you second link.
ma = (a2 + a1)/ 2
mb = (b2 + b1)/ 2
cda = Cos(da)
cdb = Cos(db)
To check whether intersection exists and what kind o intersection takes place, find 4 boolean values
BStartInsideA = (Cos(ma - b1) >= cda)
BEndInsideA = (Cos(ma - b2) >= cda)
AStartInsideB = (Cos(mb - a1) >= cdb)
AEndInsideB = (Cos(mb - a2) >= cdb)
These combinations could form 16 possible results (not all are reliable). I'd combine these results as bits of 4-bit value and treat them in the case
statement.
For example, if the first and the last values are true (value 0b1001 = 9
), you have simple intersection like your seg1-seg2 case - so get AStart ans starting point, BEnd as ending point and normalize them (add 360 to BEnd if it is less than AStart).
Pre-normalization step should provide BEnd>=BStart and AEnd>=AStart (for example, transform (3,1) arc into (3, 361) with middle point 182 and semi-angle 179)
Possible results (two extra cases, 4 simple end combinations, 4 one-end coinciding cases):
0000: no intersection
1111: full circle
0011: AStart-AEnd
1001: AStart-BEnd
0110: BStart-AEnd
1100: BStart-BEnd
0111: AStart-AEnd
1011: AStart-AEnd
1110: BStart-BEnd
1101: BStart-BEnd
One-bit combinations and 1010, 0101 look impossible
with wildcards, as author proposed:
At first check for
0000: no intersection
1111: full circle
then
**11: AStart-AEnd
1001: AStart-BEnd
0110: BStart-AEnd
11**: BStart-BEnd
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…