Points in local and global coordinates [SOLVED]
On 24/11/2014 at 17:09, xxxxxxxx wrote:
I am confused as to how some of this works. I've read the documentation, tried to implement it, and I just can't seem to get it to work. I read up on how to do the math on matrices, however, I am a bit lost.
I've looked into numPy but I currently don't have it.. and I would rather not use something that would have to be installed on every machine just to use this particular code.
Here's the rundown.
In the documentation it says:
What if you have a position in global coordinates and want to move an object to that position? Then you need a transformation back from global coordinates to the object's local position coordinates. Mathematically this is done by multiplication by the global matrix' inverse. If Mg is a matrix in global space and Mag is object a's global matrix, then Mag-1*Mg equals the first matrix' in a's local coordinates.
It also says that you don't need to do the math because there are the functions:
SetMl (ml) and SetMg (mg)
Those only work for the baseObject.. and not a point.
I've tried to plug in the Mag-1*Mg into some test code, just so I can see if the numbers come out correctly. However, I don't understand how to use that correctly. From my understanding of the documentation and the provided code, Mag is globalPoint and Mg would be worldSpaceCoords.
doc = c4d.documents.GetActiveDocument () op = doc.GetActiveObject () worldSpaceCoords = op.GetMg() allPoints = op.GetAllPoints() for i,a in enumerate (allPoints) : localPoint = op.GetPoint (i) print 'local', localPoint globalPoint = localPoint * worldSpaceCoords print 'global', globalPoint backLocalPoint = globalPoint-1*worldSpaceCoords print 'back to local', backLocalPoint print '--'
Currently I'm running into the following error:
TypeError: unsupported operand type(s) for -: 'c4d.Vector' and 'c4d.Matrix'
I'm lost in the math as to how to get back to the local coordinates.
On 25/11/2014 at 01:29, xxxxxxxx wrote:
as the documentation says "Mag" should be a matrix. In your code you try to handle a vector:
backLocalPoint = globalPoint-1*worldSpaceCoords
inverseMatrix = ~worldSpaceCoords backLocalPoint = globalPoint * inverseMatrix
You find some examples of complex matrix use in the SpherifyModifier example.
On 25/11/2014 at 16:23, xxxxxxxx wrote:
I thought the documentation sounded weird with the -1 in there.
I was looking for the syntax for the invert operator. Everything is working now, which is fantastic thanks to you!