コード例 #1
0
ファイル: domain_test.py プロジェクト: lordmauve/lepton
    def test_AABox_intersect(self):
        from lepton.domain import AABox
        from lepton.particle_struct import Vec3
        box = AABox((-3, -1, 0), (-2, 1, 3))
        lines = [
            ((-4, 0, 1), (-2, 0, 1)),
            ((-2.5, -2, 2), (-2.5, -0.5, 2)),
            ((-2.8, 0.5, -1), (-2.8, 0.5, 1)),
            ((-1, 0, 1), (-2, 0, 1)),
            ((-2.5, 2, 2), (-2.5, 1, 2)),
            ((-2.8, 0.5, 4), (-2.8, 0.5, 1)),
        ]
        expected = [
            ((-3, 0, 1), (-1, 0, 0)),
            ((-2.5, -1, 2), (0, -1, 0)),
            ((-2.8, 0.5, 0), (0, 0, -1)),
            ((-2, 0, 1), (1, 0, 0)),
            ((-2.5, 1, 2), (0, 1, 0)),
            ((-2.8, 0.5, 3), (0, 0, 1)),
        ]
        for (start, end), (point, normal) in zip(lines, expected):
            p, N = box.intersect(start, end)
            self.failUnless(start not in box)
            self.failUnless(end in box)
            self.assertVector(p, point)
            self.assertVector(N, normal)

            # Reverse direction should yield same point and inverse normal
            p, N = box.intersect(end, start)
            self.assertVector(p, point)
            self.assertVector(N, -Vec3(*normal))
コード例 #2
0
ファイル: domain_test.py プロジェクト: jmichelsen/py-lepton
	def test_AABox_intersect(self):
		from lepton.domain import AABox
		from lepton.particle_struct import Vec3
		box = AABox((-3, -1, 0), (-2, 1, 3))
		lines = [
			((-4, 0, 1), (-2, 0, 1)),
			((-2.5, -2, 2), (-2.5, -0.5, 2)),
			((-2.8, 0.5, -1), (-2.8, 0.5, 1)),
			((-1, 0, 1), (-2, 0, 1)),
			((-2.5, 2, 2), (-2.5, 1, 2)),
			((-2.8, 0.5, 4), (-2.8, 0.5, 1)),
		]
		expected = [
			((-3, 0, 1), (-1, 0, 0)),
			((-2.5, -1, 2), (0, -1, 0)),
			((-2.8, 0.5, 0), (0, 0, -1)),
			((-2, 0, 1), (1, 0, 0)),
			((-2.5, 1, 2), (0, 1, 0)),
			((-2.8, 0.5, 3), (0, 0, 1)),
		]
		for (start, end), (point, normal) in zip(lines, expected):
			p, N = box.intersect(start, end)
			self.failUnless(start not in box)
			self.failUnless(end in box)
			self.assertVector(p, point)
			self.assertVector(N, normal)

			# Reverse direction should yield same point and inverse normal
			p, N = box.intersect(end, start)
			self.assertVector(p, point)
			self.assertVector(N, -Vec3(*normal))
コード例 #3
0
ファイル: domain_test.py プロジェクト: lordmauve/lepton
    def test_AABox_no_intersect(self):
        from lepton.domain import AABox
        box = AABox((-3, -1, 0), (-2, 1, 3))

        # No intersection
        self.assertEqual(box.intersect((-4, 2, 1), (-2, 2, 1)), (None, None))
        self.assertEqual(box.intersect((-2, 0, 1), (-2.8, 0.5, 1)),
                         (None, None))
コード例 #4
0
ファイル: domain_test.py プロジェクト: lordmauve/lepton
 def test_AABox_grazing_intersect(self):
     from lepton.domain import AABox
     box = AABox((-3, -1, 0), (-2, 1, 3))
     p, N = box.intersect((-4, 0, 1), (0, 0, 1))
     self.assertEqual(p, (-3, 0, 1))
     self.assertEqual(N, (-1, 0, 0))
     p, N = box.intersect((0, 0, 1), (-4, 0, 1))
     self.assertEqual(p, (-2, 0, 1))
     self.assertEqual(N, (1, 0, 0))
コード例 #5
0
ファイル: domain_test.py プロジェクト: jmichelsen/py-lepton
	def test_AABox_no_intersect(self):
		from lepton.domain import AABox
		box = AABox((-3, -1, 0), (-2, 1, 3))
	
		# No intersection
		self.assertEqual(
			box.intersect((-4, 2, 1), (-2, 2, 1)), (None, None))
		self.assertEqual(
			box.intersect((-2, 0, 1), (-2.8, 0.5, 1)), (None, None))
コード例 #6
0
ファイル: domain_test.py プロジェクト: jmichelsen/py-lepton
	def test_AABox_grazing_intersect(self):
		from lepton.domain import AABox
		box = AABox((-3, -1, 0), (-2, 1, 3))
		p, N = box.intersect((-4, 0, 1), (0, 0, 1))
		self.assertEqual(p, (-3, 0, 1))
		self.assertEqual(N, (-1, 0, 0))
		p, N = box.intersect((0, 0, 1), (-4, 0, 1))
		self.assertEqual(p, (-2, 0, 1))
		self.assertEqual(N, (1, 0, 0))
コード例 #7
0
ファイル: domain_test.py プロジェクト: lordmauve/lepton
    def test_AABox_line_in_sides(self):
        from lepton.domain import AABox
        box = AABox((-3, -1, 0), (-2, 1, 3))

        # Lines completely in sides
        lines = [
            ((-3, 0, 1), (-3, 0.5, 2)),
            ((-2.5, -1, 2), (-2, -1, 2)),
            ((-2.8, 0.5, 0), (-2.5, 0.5, 0)),
            ((-2, 0, 1), (-2, 0.5, 2)),
            ((-2.5, 1, 2), (-2.5, 1, 1)),
            ((-2.8, 0.5, 3), (-2.9, 0.5, 3)),
        ]
        for start, end in lines:
            self.assertEqual(box.intersect(start, end), (None, None))
コード例 #8
0
ファイル: domain_test.py プロジェクト: jmichelsen/py-lepton
	def test_AABox_line_in_sides(self):
		from lepton.domain import AABox
		box = AABox((-3, -1, 0), (-2, 1, 3))

		# Lines completely in sides
		lines = [
			((-3, 0, 1), (-3, 0.5, 2)),
			((-2.5, -1, 2), (-2, -1, 2)),
			((-2.8, 0.5, 0), (-2.5, 0.5, 0)),
			((-2, 0, 1), (-2, 0.5, 2)),
			((-2.5, 1, 2), (-2.5, 1, 1)),
			((-2.8, 0.5, 3), (-2.9, 0.5, 3)),
		]
		for start, end in lines:
			self.assertEqual(
				box.intersect(start, end), (None, None))