让我们说我在多维空间中有一条路径,由路径上的一系列点给出。例如。
json.sort(function(a, b) { return a.caseID > b.caseID; });
var bad_order = [];
var good_order = [];
for(var i = 0; i < json.length; i++){
if(json[i].order === null)
bad_order.push(json[i]);
else
good_order.push(json[i]);
}
等
什么是检测路径是否有任何自交点的有效算法? 完全有可能路径在我存储的点之间的某个点相交。
例如,在2D中:
p[0] = [ 0, 0, 0, 0,...]
p[1] = [ 0, 0, 0,0.01,...]
此路径没有任何相同的点,但具有自相交。
编辑:
我目前正在测试是否有任何点落在每对点创建的柱面内。
以下是我一直在玩的代码:
p[0] = [ 0, 0]
p[1] = [ 1, 0]
p[2] = [ 1, 1]
p[3] = [0.5,-0.5]
在我的机器上,这是相当慢的。
import numpy as np
def pairs(l):
for i in range(0,len(l),2):
yield (i,l[i:i+2])
def in_cyl(h0,h1,tol,p):
# efficient cylinder test from https://www.flipcode.com/archives/Fast_Point-In-Cylinder_Test.shtml
l = np.linalg.norm(h0-h1)
dx = h1-h0
for point in p:
pdx = point-h0
dot = np.dot(pdx,dx)
if dot < 0 or dot > l**2:
# outside end caps
continue
else:
# point lies within end caps. Find dist from point to cyl axis
dsq = np.dot(pdx,pdx) - dot**2/l**2
if (dsq > tol**2):
# outside cyl
continue
else:
# inside cyl
return True
return False
def self_intersect(p,tol):
for i,(h0,h1) in pairs(p):
if in_cyl(h0,h1,tol,np.vstack([p[:i],p[i+2:]])):
return True
return False
# 50-dimensional test. Intersections should be very rare
dim = 50
test_points = np.random.randn(2500,(50))
print(self_intersect(test_points,0.1))