ich hab eine Frage, da ich versuche die Hausdorffdistanz einer oberen und einer unteren Approximation, die zusammen ein Dreieick ergeben zu berechnen. Mein Problem ist, dass ich nicht weis ob das was ich mache richtig ist. Hier ist der Code wie ich es versucht habe
Code: Alles auswählen
def drange(start, stop, step):
r = start
while r < stop:
yield r
r += step
def U(x12,y12,x21,y21):
N1=drange(0,1,0.001)
U={(f1(x12,y12)+lambd*(f1(x21,y21)-f1(x12,y12)),f2(x12,y12)+lambd*(f2(x21,y21)-f2(x12,y12))) for lambd in N1}
return U
def L(x12,y12,x21,y21):
N1=drange(0,1,0.001)
L1={(f1(x12,y12),f2(x12,y12)+lambd*(f2(x21,y21)-f2(x12,y12))) for lambd in N1}
L2={(f1(x12,y12)+lambd*(f1(x21,y21)-f1(x12,y12)),f2(x21,y21)) for lambd in N1}
L=L1|L2
return L
U1=U(x12,y12,x21,y21)
L1=L(x12,y12,x21,y21)
def l1min(L,U):
N1=drange(0,1,0.001)
l1min=min(f1(x12,y12)+lambd*(f1(x21,y21)-f1(x12,y12)) for lambd in N1)
return l1min
def l2max(L,U):
N1=drange(0,1,0.001)
l2max=max(f2(x12,y12)+lambd*(f2(x21,y21)-f2(x12,y12)) for lambd in N1)
return l2max
def l2min(L,U):
N1=drange(0,1,0.001)
l2min=min(f2(x12,y12)+lambd*(f2(x21,y21)-f2(x12,y12)) for lambd in N1)
return l2min
def l1max(L,U):
N1=drange(0,1,0.001)
l1max=max(f1(x12,y12)+lambd*(f1(x21,y21)-f1(x12,y12)) for lambd in N1)
return l1max
l1min=l1min(L,U)
l2min=l2min(L,U)
l1max=l1max(L,U)
l2max=l2max(L,U)
def dist(x1,y1,x2,y2):
dist=math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
return dist
def Dist1(l1min,l2min,U1):
Dist=max(min(dist(l1min,l2min,u1,u2) for (u1,u2) in U1))
return Dist
def dH(L,U):
D1=Dist1(l1min,l2max,U1)
D2=Dist1(l1min.l2min,U1)
D3=Dist1(l1max,l2min,U1)
D4=Dist1(l1min.l2max,L1)
D5=Dist1(l1max,l2min,L1)
dH=max(D1,D2,D3,D4,D5)
return dH
leider hab ich zum einen das Problem, dass ich z.B. U als konvexkomination zweier Punkte darstellen soll und ich durch die Definition von U nur eine ungefähre Menge definiert habe und zum anderen weis ich nicht ob ich die Hausdorffdistanz so richtig angefangen habe zu programmieren. Wäre nett wenn mir jemand helfen könnte.
LG