Files
@ 29f28718a69b
Branch filter:
Location: OneEye/exp/tests/test_geometry.py - annotation
29f28718a69b
2.8 KiB
text/x-python
transitional data processing
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))
|