def testFourWeightedLinesOverSquare(self): """ Dati 4 segmenti non tutti sovrapponibili contemporaneamente ad un quadrato a causa di uno solo segmento, se si assegna un raggio maggiore al segmento "non sovrapponibile", l'errore diminuisce rispetto al caso in cui, allo stesso segmento, gli si assegni un peso pari a quello degli altri segmenti """ square = Path([P(0,0), P(0, 100), P(100,100), P(100,0), P(0,0)]) sqw = [1.0, 1.0, 1.0, 1.0, 1.0] T = rot(random.random()*2*math.pi) * xlate(P(random.random()*self.sf, random.random()*self.sf)) seg1 = Path([P(0,0), P(0,60)]) * T w1 = [1.0, 1.0] seg2 = Path([P(110,100), P(110,60)]) * T w2 = [100.0, 100.0] seg3 = Path([P(0,100), P(70,100)]) * T w3 = [1.0, 1.0] seg4 = Path([P(0,0), P(83,0)]) * T w4 = [1.0, 1.0] mr1 = vecpathOverPath([seg1, seg2, seg3, seg4], square, 10) e1 = float(mr1.sse) # seg2 non puo' essere sovrapposto a square insieme agli altri segmenti. # Se aumentiamo il raggio di precisione di seg2 , gli # altri si dovrebbero allineare meglio, facendo diminuire l'errore mr2 = vecpathOverPath([seg1, seg2, seg3, seg4], [w1, w2, w3, w4], square, sqw, 10) e2 = float(mr2.sse) self.assertTrue(e2 <= e1)
def testTwoLinesOverSquare(self): """ Dato un quadrato e 2 suoi lati, la funzione deve restituire la matrice di rototraslazione per sovrapporre i 2 lati al quadrato originale """ square = Path([P(0,0), P(0, 100), P(100,100), P(100,0), P(0,0)]) T = rot(random.random()*2*math.pi) * xlate(P(random.random()*self.sf, random.random()*self.sf)) seg1 = Path([P(1,1), P(1,61)]) * T seg2 = Path([P(101,101), P(101,61)]) * T mr = vecpathOverPath([seg1, seg2], square, 10) A = X(mr.A) self.assertAlmostEquals(mr.sse/mr.n, 0.0) for p1 in list(seg1)+list(seg2): # controllo della distanza punto-path self.assertAlmostEquals(square.project(p1*A).dist, 0, tollerance)