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 |
FreeCAD