test_intersect.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import numpy
  2. import pytest
  3. from freesurfer_surface.geometry import _intersect_planes, _Line
  4. @pytest.mark.parametrize(
  5. ('normal_vector_a', 'constant_a',
  6. 'normal_vector_b', 'constant_b',
  7. 'expected_line'),
  8. [([0, 0, 1], 0, [0, 1, 0], 0, _Line([0, 0, 0], [1, 0, 0])),
  9. ([0, 0, 1], 0, [0, 3, 0], 0, _Line([0, 0, 0], [1, 0, 0])),
  10. ([0, 0, 1], 0, [4, 0, 0], 0, _Line([0, 0, 0], [0, 1, 0])),
  11. ([0, 2, 2], 0, [3, 0, 3], 0, _Line([0, 0, 0], [1, 1, -1])),
  12. ([1, 2, 4], 0, [2, 3, 5], 0, _Line([0, 0, 0], [-2, 3, -1])),
  13. ([1, 2, 4], 0, [2, 3, 5], 2, _Line([2, 1, -1], [-2, 3, -1])),
  14. ([2, 3, 5], 2, [1, 2, 4], 0, _Line([2, 1, -1], [-2, 3, -1])),
  15. ([2, 3, 5], 2, [1, 2, 4], 7, _Line([-7, -3, 5], [-2, 3, -1])),
  16. ([1, 2, 4], 0, [2, 4, 8], 1, False),
  17. ([1, 2, 4], 0, [2, 4, 8], 0, True)],
  18. )
  19. def test__intersect_planes(normal_vector_a, constant_a,
  20. normal_vector_b, constant_b,
  21. expected_line):
  22. line = _intersect_planes(normal_vector_a, constant_a,
  23. normal_vector_b, constant_b)
  24. assert line == expected_line
  25. if not isinstance(expected_line, bool):
  26. assert numpy.isclose(numpy.inner(normal_vector_a, line.vector), 0)
  27. assert numpy.isclose(numpy.inner(normal_vector_b, line.vector), 0)
  28. assert numpy.isclose(numpy.inner(normal_vector_a, line.point),
  29. constant_a)
  30. assert numpy.isclose(numpy.inner(normal_vector_b, line.point),
  31. constant_b)
  32. other_point = line.point + line.vector
  33. assert numpy.isclose(numpy.inner(normal_vector_a, other_point),
  34. constant_a)
  35. assert numpy.isclose(numpy.inner(normal_vector_b, other_point),
  36. constant_b)