def normpath_selfintersections(self, np, epsilon): # <<<
"""return all self-intersection points of normpath np.
This does not include the intersections of a single normcurve with itself,
but all intersections of one normpathitem with a different one in the path"""
n = len(np)
linearparams = []
parampairs = []
paramsriap = {}
for nsp_i in range(n):
for nsp_j in range(nsp_i, n):
for nspitem_i in range(len(np[nsp_i])):
if nsp_j == nsp_i:
nspitem_j_range = range(nspitem_i+1, len(np[nsp_j]))
else:
nspitem_j_range = range(len(np[nsp_j]))
for nspitem_j in nspitem_j_range:
intsparams = np[nsp_i][nspitem_i].intersect(np[nsp_j][nspitem_j], epsilon)
if intsparams:
for intsparam_i, intsparam_j in intsparams:
if ( (abs(intsparam_i) < epsilon and abs(1-intsparam_j) < epsilon) or
(abs(intsparam_j) < epsilon and abs(1-intsparam_i) < epsilon) ):
continue
npp_i = normpath.normpathparam(np, nsp_i, float(nspitem_i)+intsparam_i)
npp_j = normpath.normpathparam(np, nsp_j, float(nspitem_j)+intsparam_j)
linearparams.append(npp_i)
linearparams.append(npp_j)
paramsriap[id(npp_i)] = len(parampairs)
paramsriap[id(npp_j)] = len(parampairs)
parampairs.append((npp_i, npp_j))
linearparams.sort()
return linearparams, parampairs, paramsriap
# >>>
评论列表
文章目录