def testKochSnowflakePath(self):
     # L'algoritmo di Malkman a volte restituisce un numero di punti diverso
     # dall'agoritmo Monotone chain e comunque in diverso ordine.
     for level in range(5):
         snowflake = snowflake_path(level)
         self.assertEqual(len(snowflake), 3*4**level+1)
         CHpath = convex_hull(snowflake)
         CHpoints = convex_hull(snowflake.points())
         for p in CHpath:
             self.assertTrue(inside_equal(p, CHpoints, True))
         for p in CHpoints:
             self.assertTrue(inside_equal(p, CHpath, True))
 def testRandomSetOfPoint(self):
     random.seed(123)
     rand = random.random
     npoints = 100
     scale_f = 20.0
     pts = []
     for n in range(npoints):
         pt = P(scale_f*(rand()-0.5), scale_f*(rand()-0.5))
         pts.append(pt)
     CH = convex_hull(pts)
     for p in pts:
         is_inside_with_overlap = inside_equal(p, CH, True)
         is_inside_strict = inside_equal(p, CH, False)
         self.assertTrue(is_inside_with_overlap)
         if is_inside_with_overlap and not is_inside_strict:
             self.assertTrue(p in CH)
Exemple #3
0
 def testInsideEqual(self):
     self.p1 = geo2d.Path([P(0,0), P(10,0), P(10,10), P(0,10), P(0,0)])
     # Rombo chiuso in 0,0 di diagonali 10 e 5
     self.p3 = geo2d.Path([P(0,0), P(2.5,5), P(0,10), P(-2.5,5), P(0,0)])
     # punto interno al rombo
     self.assertEqual( geo2d.inside_equal(P(1, 2.5), self.p3, True), True)
     self.assertEqual( geo2d.inside_equal(P(1, 2.5), self.p3, False), True)
     # punto esterno al rombo
     self.assertEqual( geo2d.inside_equal(P(2, 2.5), self.p3, True), False)
     self.assertEqual( geo2d.inside_equal(P(2, 2.5), self.p3, False), False)
     # punto su lato obliquo del rombo
     self.assertEqual( geo2d.inside_equal(P(1.25, 2.5), self.p3, False), False)
     self.assertEqual( geo2d.inside_equal(P(1.25, 2.5), self.p3, True), True)
     # punto interno al quadrato
     self.assertEqual( geo2d.inside_equal(P(5,5), self.p1, True), True)
     self.assertEqual( geo2d.inside_equal(P(5,5), self.p1, False), True)
     # punto esterno al quadrato
     self.assertEqual( geo2d.inside_equal(P(11,11), self.p1, True), False)
     self.assertEqual( geo2d.inside_equal(P(11,11), self.p1, False), False)
     # punto su segmento verticale
     self.assertEqual( geo2d.inside_equal(P(10,5), self.p1, True), True)
     self.assertEqual( geo2d.inside_equal(P(10,5), self.p1, False), False)
     # punto su segmento orizzontale
     self.assertEqual( geo2d.inside_equal(P(5,0), self.p1, True), True)
     self.assertEqual( geo2d.inside_equal(P(5,0), self.p1, False), False)
     # punto su vertice
     self.assertEqual( geo2d.inside_equal(P(0,0), self.p1, False), False)
     self.assertEqual( geo2d.inside_equal(P(0,0), self.p1, True), True)
     # altro punto su vertice
     self.assertEqual( geo2d.inside_equal(P(10,10), self.p1, False), False)
     self.assertEqual( geo2d.inside_equal(P(10,10), self.p1, True), True)