Files
@ 5f42b982809c
Branch filter:
Location: OneEye/exp/tests/test_geometry.py - annotation
5f42b982809c
2.8 KiB
text/x-python
deferred data preprocessing saving space
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 d07ae4bfa145 d07ae4bfa145 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 7c268e382b96 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 739df5e211d8 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 d07ae4bfa145 | import math
import random
from unittest import TestCase
import numpy as np
from geometry import Line,EPoint
random.seed(361)
class TestLine(TestCase):
def testFromNormal(self):
p=Line.fromNormal(1,0,-1) # x-1=0
self.assertEqual(p._alpha,0)
self.assertEqual(p._d,1)
q=Line.fromNormal(1,1,-2) # x+y-2=0
self.assertAlmostEqual(q._alpha,math.pi/4)
self.assertAlmostEqual(q._d,math.sqrt(2))
r=Line.fromNormal(0,1,1) # y+1=0
self.assertAlmostEqual(r._alpha,math.pi*3/2)
self.assertEqual(r._d,1)
def testFromPoints(self):
ab=Line.fromPoints(EPoint(1,3),EPoint(1,-1))
self.assertEqual(ab._alpha,0)
self.assertEqual(ab._d,1)
cd=Line.fromPoints(EPoint(0,2),EPoint(-1,3))
self.assertAlmostEqual(cd._alpha,math.pi/4)
self.assertAlmostEqual(cd._d,math.sqrt(2))
ef=Line.fromPoints(EPoint(-2,-1),EPoint(-4,-1))
self.assertAlmostEqual(ef._alpha,math.pi*3/2)
self.assertEqual(ef._d,1)
def testIntersect(self):
for i in range(10):
a=EPoint(random.randint(-100,100),random.randint(-100,100))
b=EPoint(random.randint(-100,100),random.randint(-100,100))
c=EPoint(random.randint(-100,100),random.randint(-100,100))
ab=Line.fromPoints(a,b)
ac=Line.fromPoints(a,c)
a_=ab.intersect(ac)
self.assertAlmostEqual(a.x,a_.x)
self.assertAlmostEqual(a.y,a_.y)
def testDistanceTo(self):
p=Line(0,1)
q=Line(math.pi/4,math.sqrt(2))
r=Line(math.pi*3/2,1)
a=EPoint(0,0)
b=EPoint(1,0)
c=EPoint(-1,-1)
self.assertAlmostEqual(p.distanceTo(a),1)
self.assertAlmostEqual(p.distanceTo(b),0)
self.assertAlmostEqual(p.distanceTo(c),2)
self.assertAlmostEqual(q.distanceTo(a),math.sqrt(2))
self.assertAlmostEqual(q.distanceTo(b),math.sqrt(2)/2)
self.assertAlmostEqual(q.distanceTo(c),2*math.sqrt(2))
self.assertAlmostEqual(r.distanceTo(a),1)
self.assertAlmostEqual(r.distanceTo(b),1)
self.assertAlmostEqual(r.distanceTo(c),0)
def testShiftBasis(self):
newBasis=EPoint(-200,150)
r=Line(0,-100)
r_=r.shiftBasis(newBasis)
self.assertAlmostEqual(r_._alpha,0)
self.assertAlmostEqual(r_._d,100)
s=Line(0,100)
s_=s.shiftBasis(newBasis)
self.assertAlmostEqual(s_._alpha,0)
self.assertAlmostEqual(s_._d,300)
newBasis=EPoint(-100,100)
diag=100*math.sqrt(2)
p=Line(math.pi*3/4,diag/2)
p_=p.shiftBasis(newBasis)
self.assertAlmostEqual(p_._alpha,math.pi*7/4)
self.assertAlmostEqual(p_._d,diag/2)
q=Line(math.pi*3/4,-diag/2)
q_=q.shiftBasis(newBasis)
self.assertAlmostEqual(q_._alpha,math.pi*7/4)
self.assertAlmostEqual(q_._d,3/2*diag)
def testTransform(self):
rot90=np.array([[0,-1,0],[1,0,0],[0,0,1]])
p=Line(math.pi/4,10)
p_=p.transform(rot90)
self.assertAlmostEqual(p_.alpha,math.pi*3/4)
self.assertAlmostEqual(p_.d,p.d)
shiftXY10=np.array([[1,0,10],[0,1,10],[0,0,1]])
p_=p.transform(shiftXY10)
self.assertAlmostEqual(p_.alpha,p.alpha)
self.assertAlmostEqual(p_.d,10+10*math.sqrt(2))
|