예제 #1
0
    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)
예제 #2
0
 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)