OSVR Framework (Internal Development Docs)  0.6-1962-g59773924
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
incrotjacobian.py
1 import re
2 raw = """
3 auto v1 = m_rotatedObjPoint[1]+pos[1];
4 auto v2 = m_rotatedObjPoint[3]+pos[3];
5 auto v3 = 1/v2^2;
6 auto v4 = 1/v2;
7 auto v5 = m_rotatedObjPoint[2]+pos[2];
8 Eigen::Matrix<double,2,3> ret;
9 ret <<
10  -v1*m_rotatedObjPoint[2]*v3*fl,
11  m_rotatedObjPoint[3]*v4*fl+m_rotatedObjPoint[1]*v1*v3*fl,
12  -m_rotatedObjPoint[2]*v4*fl,
13  (-m_rotatedObjPoint[3]*v4*fl)-m_rotatedObjPoint[2]*v5*v3*fl,
14  m_rotatedObjPoint[1]*v5*v3*fl,
15  m_rotatedObjPoint[1]*v4*fl;
16 """
17 
18 matrixIndexPattern = re.compile(r'\[([0-9]),([0-9])]', re.VERBOSE)
19 def replaceMatrixIndices(inString):
20  def matchfunc(match):
21  return '({}, {})'.format(int(match.group(1)) - 1, int(match.group(2)) - 1)
22 
23  return matrixIndexPattern.sub(matchfunc, inString)
24 
25 vectorIndexPattern = re.compile(r'\[([0-9])]', re.VERBOSE)
26 def replaceVectorIndices(inString):
27  def matchfunc(match):
28  return '[{}]'.format(int(match.group(1)) - 1)
29  return vectorIndexPattern.sub(matchfunc, inString)
30 
31 class Chainable:
32  def __init__(self, inString):
33  self._string = replaceVectorIndices(replaceMatrixIndices(inString))
34 
35  def replace(self, old, new):
36  self._string = self._string.replace(old, new)
37  return self
38  def string(self):
39  return self._string
40 out = Chainable(raw
41  ).replace('v2^2', '(v2*v2)'
42  ).replace('fl', 'm_cam.focalLength'
43  ).replace('pos', 'm_xlate'
44  ).string()
45 print(out)
46 #print(.sub(r'(\1 - 1, \2 - 1)', input))