Files
@ 739df5e211d8
Branch filter:
Location: OneEye/exp/tests/test_geometry.py - annotation
739df5e211d8
2.4 KiB
text/x-python
fixed Hough transform input/ouput coordinates, fixed lines detection
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 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 | import math
import random
from unittest import TestCase
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)
|