View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000856 | FreeCAD | Bug | public | 2012-10-22 11:11 | 2012-10-22 12:22 |
Reporter | wmayer | Assigned To | |||
Priority | urgent | Severity | major | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Fixed in Version | 0.13 | ||||
Summary | 0000856: Wrong inverse of a matrix | ||||
Description | There must be a heavy bug in the calculation of the inverse of a matrix. Example: m=App.Matrix(4.,2.,1.,0.,1.,1.,1.,0.,0.,0.,1.,0.,0.,0.,0.,1.) i=m.inverse() m.multiply(i) # this is not the unity matrix !!! c=App.Matrix(0.5,-1.,0.5,0.,-0.5,2.,-1.5,0.,0.,0.,1.,0.,0.,0.,0.,1.) m.multiply(c) | ||||
Tags | No tags attached. | ||||
FreeCAD Information | |||||
|
But: m=App.Matrix(0.,0.,1.,0.,1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,0.,1.) m.determinant() # = 1.0 m.multiply(m.inverse()) # correct So, it seems the algorithm only works if det(M)==1 |
|
According to source code Matrix::inverse() expects the 3x3 sub-matrix to be a rotation matrix. For a usual matrix inverseGauss() should be used. After all the documentation doesn't clearly mention this and in the Python binding inverseGauss() should be used. |
|
git show 642a3e5 |
Date Modified | Username | Field | Change |
---|---|---|---|
2012-10-22 11:11 | wmayer | New Issue | |
2012-10-22 11:14 | wmayer | Note Added: 0002462 | |
2012-10-22 11:38 | wmayer | Note Added: 0002463 | |
2012-10-22 12:22 | wmayer | Note Added: 0002464 | |
2012-10-22 12:22 | wmayer | Status | new => closed |
2012-10-22 12:22 | wmayer | Resolution | open => fixed |
2012-10-22 12:22 | wmayer | Fixed in Version | => 0.13 |