1 from test_msg 
import debug, info, error, warning
 
    5 from test_import 
import test_import
 
    7 from ROOT 
import geoalgo
 
   20     debug(BLUE + 
"Precision Being Required to Consider Two numbers Equal: {0:.2e}".
format(_epsilon) + ENDC)
 
   32         info(
'Testing Point & Infinite Line Distance')
 
   36         for y 
in range(tests):
 
   48             dirct = l.Pt2()-l.Pt1()
 
   49             transZ = (-transX*dirct[0]-transY*dirct[1])/dirct[2]
 
   54             answer = vectTranslate.SqLength()
 
   57             a1 = dAlgo.SqDist(pt,l)
 
   58             sqdistT += (
time()-tim)
 
   59             a2 = dAlgo.SqDist(l,pt)
 
   61             pAnswer1 = dAlgo.ClosestPt(pt,l)
 
   62             closestT += (
time()-tim)
 
   63             pAnswer2 = dAlgo.ClosestPt(l,pt)
 
   64             if not ( 
abs(answer-a1) < _epsilon ) : success = 0
 
   65             if not ( 
abs(answer-a2) < _epsilon ) : success = 0
 
   67                 if not ( 
abs(p1[x]-pAnswer1[x]) < _epsilon) : success = 0
 
   68                 if not ( 
abs(p1[x]-pAnswer2[x]) < _epsilon) : success = 0
 
   70         if ( float(totSuccess)/tests < 1):
 
   71             info(NO + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
   73             info(OK + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
   74         info(
"Time for SqDist                       : {0:.3f} us".
format(1E6*sqdistT/tests))
 
   75         info(
"Time for ClosestPt                    : {0:.3f} us".
format(1E6*closestT/tests))
 
   78         info(
'Testing Point & LineSegment Distance')
 
   84         for y 
in range(tests):
 
  100             transZ = (-transX*d[0]-transY*d[1])/d[2]
 
  102             p1 = l.Start()+vectTranslate
 
  103             p2 = l.End()+vectTranslate
 
  112             dirOut = lPar.Dir()*(-1*dist/lPar.Dir().
Length())
 
  114             answer = dirOut.SqLength()+vectTranslate.SqLength()
 
  116             a1 = dAlgo.SqDist(pTest,l)
 
  117             sqdistT_out += (
time() - tim)
 
  118             a2 = dAlgo.SqDist(l,pTest)
 
  119             if not ( 
abs(answer-a1) < _epsilon): success = 0
 
  120             if not ( 
abs(answer-a2) < _epsilon): success = 0
 
  122             point1 = dAlgo.ClosestPt(pTest,l)
 
  123             closestT_out += (
time() - tim)
 
  124             point2 = dAlgo.ClosestPt(l,pTest)
 
  126                 if not ( (l.Start()[x]-point1[x]) < _epsilon ) : success = 0
 
  127                 if not ( (l.Start()[x]-point2[x]) < _epsilon ) : success = 0
 
  133             dirIn = lPar.Dir()*dist 
 
  135             answer = vectTranslate.SqLength()
 
  137             a1 = dAlgo.SqDist(pTest,l)
 
  138             sqdistT_in += (
time() - tim)
 
  139             a2 = dAlgo.SqDist(l,pTest)
 
  140             if not (
abs(answer-a1) < _epsilon): success = 0
 
  141             if not (
abs(answer-a2) < _epsilon): success = 0
 
  142             pAns = l.Start()+dirIn
 
  144             point1 = dAlgo.ClosestPt(pTest,l)
 
  145             closestT_in += (
time() - tim)
 
  146             point2 = dAlgo.ClosestPt(l,pTest)
 
  148                 if not ( (pAns[x]-point1[x]) < _epsilon ) : success = 0
 
  149                 if not ( (pAns[x]-point2[x]) < _epsilon ) : success = 0
 
  153             dirOut = lPar.Dir()*(dist/lPar.Dir().
Length())
 
  155             answer = dirOut.SqLength()+vectTranslate.SqLength()
 
  156             if not ( 
abs(answer-dAlgo.SqDist(pTest,l)) < _epsilon): success = 0
 
  157             if not ( 
abs(answer-dAlgo.SqDist(l,pTest)) < _epsilon): success = 0
 
  158             point1 = dAlgo.ClosestPt(pTest,l)
 
  159             point2 = dAlgo.ClosestPt(pTest,l)
 
  161                 if not ( (l.End()[x]-point1[x]) < _epsilon ) : success = 0
 
  162                 if not ( (l.End()[x]-point2[x]) < _epsilon ) : success = 0
 
  164             if (success == 1) : totSuccess += 1
 
  165         if ( float(totSuccess)/tests < 1):
 
  166             info(NO + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
  168             info(OK + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
  169         info(
"Time for SqDist (Pt Out of Segment)   : {0:.3f} us".
format(1E6*sqdistT_out/tests))
 
  170         info(
"Time for ClosestPt (Pt Out of Segment): {0:.3f} us".
format(1E6*closestT_out/tests))
 
  171         info(
"Time for SqDist (Pt In Segment)       : {0:.3f} us".
format(1E6*sqdistT_in/tests))
 
  172         info(
"Time for ClosestPt (Pt In Segment)    : {0:.3f} us".
format(1E6*closestT_in/tests))
 
  175         debug(
'Testing Point & HalfLine Distance')
 
  182         for x 
in range(tests):
 
  193             transZ = (-transX*l.Dir()[0]-transY*l.Dir()[1])/l.Dir()[2]
 
  202             dirOut = lPar.Dir()*(-1*dist)
 
  203             pTest = lPar.Start()+dirOut
 
  204             answer = dirOut.SqLength()+vectTranslate.SqLength()
 
  206             a1 = dAlgo.SqDist(pTest,l)
 
  209             a2 = dAlgo.SqDist(l,pTest)
 
  210             if not ( 
abs(answer-a1) < _epsilon): success = 0
 
  211             if not ( 
abs(answer-a2) < _epsilon): success = 0
 
  213             point1 = dAlgo.ClosestPt(pTest,l)
 
  216             point2 = dAlgo.ClosestPt(l,pTest)
 
  218                 if not ( (l.Start()[x]-point1[x]) < _epsilon ) : success = 0
 
  219                 if not ( (l.Start()[x]-point2[x]) < _epsilon ) : success = 0
 
  225             dirIn = lPar.Dir()*dist 
 
  226             pTest = lPar.Start()+dirIn
 
  227             answer = vectTranslate.SqLength()
 
  228             pAns = l.Start()+dirIn
 
  230             a1 = dAlgo.SqDist(pTest,l)
 
  233             a2 = dAlgo.SqDist(l,pTest)
 
  234             if not ( 
abs(answer-a1) < _epsilon): success = 0
 
  235             if not ( 
abs(answer-a2) < _epsilon): success = 0
 
  237             point1 = dAlgo.ClosestPt(pTest,l)
 
  240             point2 = dAlgo.ClosestPt(l,pTest)
 
  242                 if not ( (pAns[x]-point1[x]) < _epsilon ) : success = 0
 
  243                 if not ( (pAns[x]-point2[x]) < _epsilon ) : success = 0
 
  245             if (success == 1) : totSuccess += 1
 
  246         if ( float(totSuccess)/tests < 1):
 
  247             info(NO + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
  249             info(OK + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
  250         info(
"Time for SqDist (Pt Out of Segment)   : {0:.3f} us".
format(1E6*sqdistT_out/tests))
 
  251         info(
"Time for ClosestPt (Pt Out of Segment): {0:.3f} us".
format(1E6*closestT_out/tests))
 
  252         info(
"Time for SqDist (Pt In Segment)       : {0:.3f} us".
format(1E6*sqdistT_in/tests))
 
  253         info(
"Time for ClosestPt (Pt In Segment)    : {0:.3f} us".
format(1E6*closestT_in/tests))
 
  256         debug(
'Testing Inf Line & Inf Line Distance')
 
  260         for y 
in range(tests):
 
  270             p1 = (l1.Pt2()+l1.Pt1())/2
 
  272             d1 = (l1.Pt2()-l1.Pt1())
 
  276             dirz = (-dirx*d1[0]-diry*d1[1])/d1[2]
 
  283             vectRotate = vectTranslate.Cross(d1)
 
  284             l2 = 
geoalgo.Line(p1+vectTranslate,p1+vectTranslate+vectRotate)
 
  286             answer = vectTranslate.SqLength()
 
  288             a1 = dAlgo.SqDist(l1,l2)
 
  294             a2 = dAlgo.SqDist(l1,l2,ptL1,ptL2)
 
  295             if not (
abs(answer-a1) < _epsilon): success = 0
 
  296             if not (
abs(answer-a2) < _epsilon) : success = 0
 
  298                 if not ( 
abs(ptL1[x]-p1[x]) < _epsilon ) : success = 0
 
  299                 if not ( 
abs(ptL2[x]-l2.Pt1()[x]) < _epsilon ) : success = 0
 
  301             if (success == 1) : totSuccess += 1
 
  302         if ( float(totSuccess)/tests < 1):
 
  303             info(NO + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
  305             info(OK + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
  306         info(
"Time for SqDist                       : {0:.3f} us".
format(1E6*sqdistT/tests))
 
  309         debug(
'Testing Half-Inf Line & Half-Inf Line Distance')
 
  315         for y 
in range(tests):
 
  329             dirz = (-dirx*d1[0]-diry*d1[1])/d1[2]
 
  333             if (
random() < 0.5) : aligned = 1
 
  342                 a1 = dAlgo.SqDist(l1,l2)
 
  346                 a2 = dAlgo.SqDist(l1,l2,L1,L2)
 
  348                 if not (
abs(answer-a1) < _epsilon): success = 0
 
  349                 if not (
abs(answer-a2) < _epsilon): success = 0
 
  351                     if not (L1[x]-L2[x] < _epsilon) : success = 0
 
  354                 answer = vectTranslate.SqLength()
 
  356                 a1 = dAlgo.SqDist(l1,l2)
 
  360                 a2 = dAlgo.SqDist(l1,l2,L1,L2)
 
  362                 if not (
abs(answer-a1) < _epsilon): success = 0
 
  363                 if not (
abs(answer-a2) < _epsilon): success = 0
 
  365                     if not (L1[x]-l1.Start()[x] < _epsilon) : success = 0
 
  366                     if not (L2[x]-l2.Start()[x] < _epsilon) : success = 0
 
  368             if (success == 1) : totSuccess += 1
 
  369         if ( float(totSuccess)/tests < 1):
 
  370             info(NO + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
  372             info(OK + 
"Success: {0}%".
format(100*float(totSuccess)/tests) + ENDC)
 
  373         info(
"Time for SqDist (OUT)                 : {0:.3f} us".
format(1E6*sqdistT_out/timesOUT))
 
  374         info(
"Time for SqDist (IN)                  : {0:.3f} us".
format(1E6*sqdistT_in/timesIN))
 
  378         debug(
'Testing Half Line & Line Segment Distance')
 
  387         for y 
in range(tests):
 
  409             dirz = (-dirx*d1[0]-diry*d1[1])/d1[2]
 
  417             answer = vectTranslate*vectTranslate+dist*dist
 
  419             a1 = dAlgo.SqDist(l1,seg)
 
  424             a2 = dAlgo.SqDist(l1,seg,L1,L2)
 
  425             if not (
abs(answer-a1) < _epsilon): success1 = 0
 
  426             if not (
abs(answer-a2) < _epsilon): success1 = 0
 
  428                 if not (L1[x]-l1.Start()[x] < _epsilon) : success1 = 0
 
  429                 if not (L2[x]-seg.Start()[x] < _epsilon) : success1 = 0
 
  430             if (success1 == 1) : totSuccess1 += 1
 
  433             vectRotate = vectTranslate.Cross(d1)
 
  435             pivot = p1+vectTranslate-d1*dist
 
  439             answer = vectTranslate*vectTranslate+dist*dist
 
  441             a1 = dAlgo.SqDist(l1,seg,L1,L2)
 
  442             sqdistT2 += (
time()-tim)
 
  443             a2 = dAlgo.SqDist(seg,l1)
 
  444             if not (
abs(answer-a1) < _epsilon): success2 = 0
 
  445             if not (
abs(answer-a2) < _epsilon): success2 = 0
 
  447                 if not (L1[x]-l1.Start()[x] < _epsilon) : success2 = 0
 
  448                 if not (L2[x]-pivot[x] < _epsilon) : success2 = 0
 
  449             if (success2 == 1) : totSuccess2 += 1
 
  454             answer = vectTranslate*vectTranslate
 
  456             a1 = dAlgo.SqDist(l1,seg,L1,L2)
 
  457             sqdistT3 += (
time()-tim)
 
  458             a2 = dAlgo.SqDist(seg,l1)
 
  459             if not (
abs(answer-a1) < _epsilon): success3 = 0
 
  460             if not (
abs(answer-a2) < _epsilon): success3 = 0
 
  461             ptLine = l1.Start()+d1*dist
 
  463                 if not (L1[x]-ptLine[x] < _epsilon) : success3 = 0
 
  464                 if not (L2[x]-seg.Start()[x] < _epsilon) : success3 = 0
 
  465             if (success3 == 1) : totSuccess3 += 1
 
  467             pivot = p1+vectTranslate+d1*dist
 
  471             answer = vectTranslate*vectTranslate
 
  473             a1 = dAlgo.SqDist(l1,seg,L1,L2)
 
  474             sqdistT4 += (
time()-tim)
 
  475             a2 = dAlgo.SqDist(seg,l1)
 
  476             if not (
abs(answer-a1) < _epsilon): success4 = 0
 
  477             if not (
abs(answer-a2) < _epsilon): success4 = 0
 
  478             ptLine = l1.Start()+d1*dist
 
  480                 if not (L1[x]-ptLine[x] < _epsilon) : success4 = 0
 
  481                 if not (L2[x]-pivot[x] < _epsilon) : success4 = 0
 
  482             if (success4 == 1) : totSuccess4 += 1
 
  484         if ( float(totSuccess1)/tests < 1):
 
  485             info(NO + 
"Success: {0}%".
format(100*float(totSuccess1)/tests) + ENDC)
 
  487             info(OK + 
"Success: {0}%".
format(100*float(totSuccess1)/tests) + ENDC)
 
  488         info(
"Time for SqDist (Case 1)              : {0:.3f} us".
format(1E6*sqdistT1/tests))
 
  489         if ( float(totSuccess2)/tests < 1):
 
  490             info(NO + 
"Success: {0}%".
format(100*float(totSuccess2)/tests) + ENDC)
 
  492             info(OK + 
"Success: {0}%".
format(100*float(totSuccess2)/tests) + ENDC)
 
  493         info(
"Time for SqDist (Case 2)              : {0:.3f} us".
format(1E6*sqdistT2/tests))
 
  494         if ( float(totSuccess3)/tests < 1):
 
  495             info(NO + 
"Success: {0}%".
format(100*float(totSuccess3)/tests) + ENDC)
 
  497             info(OK + 
"Success: {0}%".
format(100*float(totSuccess3)/tests) + ENDC)
 
  498         info(
"Time for SqDist (Case 3)              : {0:.3f} us".
format(1E6*sqdistT3/tests))
 
  499         if ( float(totSuccess4)/tests < 1):
 
  500             info(NO + 
"Success: {0}%".
format(100*float(totSuccess4)/tests) + ENDC)
 
  502             info(OK + 
"Success: {0}%".
format(100*float(totSuccess4)/tests) + ENDC)
 
  503         info(
"Time for SqDist (Case 4)              : {0:.3f} us".
format(1E6*sqdistT4/tests))
 
  506         debug(
'Testing Line Segment & Line Segment Distance')
 
  515         for y 
in range(tests):
 
  539             dirz = (-dirx*d[0]-diry*d[1])/d[2]
 
  548             answer = vectTranslate*vectTranslate+dist*dist*d.SqLength()
 
  550             a1 = dAlgo.SqDist(seg1,seg)
 
  555             a2 = dAlgo.SqDist(seg1,seg,L1,L2)
 
  556             if not (
abs(answer-a1) < _epsilon): success1 = 0
 
  557             if not (
abs(answer-a2) < _epsilon): success1 = 0
 
  559                 if not (L1[x]-seg1.Start()[x] < _epsilon) : success1 = 0
 
  560                 if not (L2[x]-seg.Start()[x] < _epsilon) : success1 = 0
 
  561             if (success1 == 1) : totSuccess1 += 1
 
  564             vectRotate = vectTranslate.Cross(d)
 
  566             pivot = p1+vectTranslate-d*dist
 
  570             answer = vectTranslate*vectTranslate+dist*dist*d.SqLength()
 
  572             a1 = dAlgo.SqDist(seg1,seg,L1,L2)
 
  573             sqdistT2 += (
time()-tim)
 
  574             a2 = dAlgo.SqDist(seg,seg1)
 
  575             if not (
abs(answer-a1) < _epsilon): success2 = 0
 
  576             if not (
abs(answer-a2) < _epsilon): success2 = 0
 
  578                 if not (L1[x]-seg1.Start()[x] < _epsilon) : success2 = 0
 
  579                 if not (L2[x]-pivot[x] < _epsilon) : success2 = 0
 
  580             if (success2 == 1) : totSuccess2 += 1
 
  586             answer = vectTranslate*vectTranslate
 
  588             a1 = dAlgo.SqDist(seg1,seg,L1,L2)
 
  589             sqdistT3 += (
time()-tim)
 
  590             a2 = dAlgo.SqDist(seg,seg1)
 
  591             if not (
abs(answer-a1) < _epsilon): success3 = 0
 
  592             if not (
abs(answer-a2) < _epsilon): success3 = 0
 
  593             ptLine = seg1.Start()+d*distin
 
  595                 if not (L1[x]-ptLine[x] < _epsilon) : success3 = 0
 
  596                 if not (L2[x]-seg.Start()[x] < _epsilon) : success3 = 0
 
  597             if (success3 == 1) : totSuccess3 += 1
 
  599             pivot = p1+vectTranslate+d*distin
 
  603             answer = vectTranslate*vectTranslate
 
  605             a1 = dAlgo.SqDist(seg1,seg,L1,L2)
 
  606             sqdistT4 += (
time()-tim)
 
  607             a2 = dAlgo.SqDist(seg,seg1)
 
  608             if not (
abs(answer-a1) < _epsilon): success4 = 0
 
  609             if not (
abs(answer-a2) < _epsilon): success4 = 0
 
  610             ptLine = seg1.Start()+d*distin
 
  612                 if not (L1[x]-ptLine[x] < _epsilon) : success4 = 0
 
  613                 if not (L2[x]-pivot[x] < _epsilon) : success4 = 0
 
  614             if (success4 == 1) : totSuccess4 += 1
 
  616         if ( float(totSuccess1)/tests < 1):
 
  617             info(NO + 
"Success: {0}%".
format(100*float(totSuccess1)/tests) + ENDC)
 
  619             info(OK + 
"Success: {0}%".
format(100*float(totSuccess1)/tests) + ENDC)
 
  620         info(
"Time for SqDist (Case 1)              : {0:.3f} us".
format(1E6*sqdistT1/tests))
 
  621         if ( float(totSuccess2)/tests < 1):
 
  622             info(NO + 
"Success: {0}%".
format(100*float(totSuccess2)/tests) + ENDC)
 
  624             info(OK + 
"Success: {0}%".
format(100*float(totSuccess2)/tests) + ENDC)
 
  625         info(
"Time for SqDist (Case 2)              : {0:.3f} us".
format(1E6*sqdistT2/tests))
 
  626         if ( float(totSuccess3)/tests < 1):
 
  627             info(NO + 
"Success: {0}%".
format(100*float(totSuccess3)/tests) + ENDC)
 
  629             info(OK + 
"Success: {0}%".
format(100*float(totSuccess3)/tests) + ENDC)
 
  630         info(
"Time for SqDist (Case 3)              : {0:.3f} us".
format(1E6*sqdistT3/tests))
 
  631         if ( float(totSuccess4)/tests < 1):
 
  632             info(NO + 
"Success: {0}%".
format(100*float(totSuccess4)/float(tests)) + ENDC)
 
  634             info(OK + 
"Success: {0}%".
format(100*float(totSuccess4)/float(tests)) + ENDC)
 
  635         info(
"Time for SqDist (Case 4)              : {0:.3f} us".
format(1E6*sqdistT4/tests))
 
  639         debug(
'Testing Point and AABox Distance/Closest Point')
 
  656         for y 
in xrange(tests):
 
  669             if not ( b.Contain(p) ) : success1 = 0
 
  678             if ( dBot < dMin )   : dMin = dBot
 
  679             if ( dLeft < dMin )  : dMin = dLeft
 
  680             if ( dRight < dMin ) : dMin = dRight
 
  681             if ( dFront < dMin ) : dMin = dFront
 
  682             if ( dBack < dMin )  : dMin = dBack
 
  685             a1 = dAlgo.SqDist(p,b)
 
  686             sqdistT1 += (
time()-tim)
 
  687             a2 = dAlgo.SqDist(b,p)
 
  690             pt1 = dAlgo.ClosestPt(b,p)
 
  691             closestT1 += (
time()-tim)
 
  692             pt2 = dAlgo.ClosestPt(p,b)
 
  693             if not (
abs(answer-a1) < _epsilon): success1 = 0
 
  694             if not (
abs(answer-a2) < _epsilon): success1 = 0
 
  696                 if not (pt1[x]-p[x] < _epsilon) : success1 = 0
 
  697                 if not (pt2[x]-p[x] < _epsilon) : success1 = 0
 
  698             if (success1 == 1) : totSuccess1 += 1
 
  703             if ( (pick > 0.33) 
and (pick < 0.67) ) : side = 1
 
  704             if ( pick > 0.67 ) : side = 2
 
  707             if ( 
random() < 0.5 ) : direction = -1
 
  715             if ( b.Contain(p) ) : success1 = 0
 
  717             if ( (side == 0) 
and (direction == 1) ):
 
  721             if ( (side == 0) 
and (direction == -1) ):
 
  725             if ( (side == 1) 
and (direction == 1) ):
 
  729             if ( (side == 1) 
and (direction == -1) ):
 
  733             if ( (side == 2) 
and (direction == 1) ):
 
  737             if ( (side == 2) 
and (direction == -1) ):
 
  743             a1 = dAlgo.SqDist(p,b)
 
  744             sqdistT2 += (
time()-tim)
 
  745             a2 = dAlgo.SqDist(b,p)
 
  748             pt1 = dAlgo.ClosestPt(b,p)
 
  749             closestT2 += (
time()-tim)
 
  750             pt2 = dAlgo.ClosestPt(p,b)
 
  754             if not (
abs(answer-a1) < _epsilon): success2 = 0
 
  755             if not (
abs(answer-a2) < _epsilon): success2 = 0
 
  759                 if not (pt1[x]-pMin[x] < _epsilon) : success2 = 0
 
  760                 if not (pt2[x]-pMin[x] < _epsilon) : success2 = 0
 
  762             if (success2 == 1) : totSuccess2 += 1
 
  764         if ( float(totSuccess1)/tests < 1):
 
  765             info(NO + 
"Success: {0}%".
format(100*float(totSuccess1)/tests) + ENDC)
 
  767             info(OK + 
"Success: {0}%".
format(100*float(totSuccess1)/tests) + ENDC)
 
  768         info(
"Time for SqDist (Case 1)              : {0:.3f} us".
format(1E6*sqdistT1/tests))
 
  769         info(
"Time for ClosestPt (Case 1)           : {0:.3f} us".
format(1E6*closestT1/tests))
 
  770         if ( float(totSuccess2)/tests < 1):
 
  771             info(NO + 
"Success: {0}%".
format(100*float(totSuccess2)/tests) + ENDC)
 
  773             info(OK + 
"Success: {0}%".
format(100*float(totSuccess2)/tests) + ENDC)
 
  774         info(
"Time for SqDist (Case 2)              : {0:.3f} us".
format(1E6*sqdistT2/tests))
 
  775         info(
"Time for ClosestPt (Case 2)           : {0:.3f} us".
format(1E6*closestT2/tests))
 
  778         error(
'geoalgo::DistanceAlgo unit test failed.')
 
  779         print traceback.format_exception(*sys.exc_info())[2]
 
  782     info(
'geoalgo::DistanceAlgo unit test complete.')
 
  785 if __name__ == 
'__main__':
 
float Length(const PFPStruct &pfp)
 
Algorithm to compute various geometrical relation among geometrical objects. In particular functions ...
 
static std::string format(PyObject *obj, unsigned int pos, unsigned int indent, unsigned int maxlen, unsigned int depth)
 
Representation of a simple 3D line segment Defines a finite 3D straight line by having the start and ...
 
Representation of a 3D rectangular box which sides are aligned w/ coordinate axis. A representation of an Axis-Aligned-Boundary-Box, a simple & popular representation of  3D boundary box for collision detection. The concept was taken from the reference,  Real-Time-Collision-Detection (RTCD), and in particular Ch. 4.2 (page 77):  . 
 
Representation of a 3D infinite line. Defines an infinite 3D line by having 2 points which completely...
 
Representation of a 3D semi-infinite line. Defines a semi-infinite 3D line by having a start point (P...