Il seguente codice dice che c1 == c2
e c2 == c3
, ma c1 != c3
.
TOL = 0.11
class C:
def __init__(self, x):
self.x = x
def __eq__(self, other):
return abs(self.x - other.x) <= TOL
c1 = C(1.1)
c2 = C(1.2)
c3 = C(1.3)
print(c1 == c2) # True
print(c2 == c3) # True
print(c1 == c3) # False
Per lo stesso motivo la forma al centro dell'immagine qui sotto potrebbe essere uguale a tutte le altre forme, mentre nessuna altra forma sarebbe uguale a tutte le altre.
Non importa quanto piccola o grande sia la tolleranza, ci sarà sempre un angolo per la linea superiore delle forme in cui si presenta il problema.
Ho bisogno di trovare un modo affidabile per abbinare le forme in modo che quando c1 == c1
una volta, c1 == c1
sempre. Nell'esempio sopra posso accettare che sia c2 == c3
o c2 != c3
, ma qualunque sia il caso, deve essere (1) coerente durante l'esecuzione e (2) coerente con altri confronti.
Se stringo la tolleranza, nessuna forma sarà mai uguale ad altre forme, a causa dei piccoli errori introdotti dalle trasformazioni.
Se allento la tolleranza, tutte le forme saranno identiche, il che non va bene.
Forse c'è un algoritmo di confronto che ricorda la prima istanza di ogni valore mai confrontato e crea un secchio per questo? Quindi, nel mio primo esempio, se confronti prima c1 in c2, allora il valore di riferimento sarà 1.1 e c2 sarà diverso da c3, ma se confronti c2 in c1 prima il valore di riferimento sarà 1.2 e saranno tutti uguali .
C'è un modo per evitare questo problema?