Re: Vector, matrix, normalize, rotate. What package?
On Feb 27, 4:49 pm, "Mattias Brändström" <[EMAIL PROTECTED]> wrote: > Hello! > > I'm trying to find what package I should use if I want to: > > 1. Create 3d vectors. > 2. Normalize those vectors. > 3. Create a 3x3 rotation matrix from a unit 3-d vector and an angle in > radians. > 4. Perform matrix multiplication. > > It seems to me that perhaps numpy should be able to help me with this. > However, I can only figure out how to do 1 and 4 using numpy. Meybe > someone knows a way to use numpy for 2 and 3? If not, what Python > package helps me with geometry related tasks such as 2 and 3? Try Alex Holkner's euclid.py module: http://cheeseshop.python.org/pypi/euclid/0.01 Richard -- http://mail.python.org/mailman/listinfo/python-list
Re: Vector, matrix, normalize, rotate. What package?
Mattias Brändström wrote: > 1. Create 3d vectors. > 2. Normalize those vectors. > 3. Create a 3x3 rotation matrix from a unit 3-d vector and an angle in > radians. > 4. Perform matrix multiplication. > > Meybe someone knows a way to use numpy for 2 and 3? Here's some code I wrote recently to do normalisation of vectors using Numeric: from Numeric import add, sqrt def dots(u, v): """Return array of dot products of arrays of vectors.""" return add.reduce(u * v, -1) def units(v): """Array of unit vectors from array of vectors.""" ds = 1.0 / sqrt(dots(v, v)) return ds * v These work best if you give them multiple vectors to work on at once, otherwise you don't get much advantage from using Numeric. I don't have anything to hand for rotation about a vector, but if you can find a formula, you should be able to use similar techniques to "vectorize" it using Numeric. -- Greg -- http://mail.python.org/mailman/listinfo/python-list
Re: Vector, matrix, normalize, rotate. What package?
Mattias Brändström wrote: > Hello! > > I'm trying to find what package I should use if I want to: > > 1. Create 3d vectors. > 2. Normalize those vectors. > 3. Create a 3x3 rotation matrix from a unit 3-d vector and an angle in > radians. > 4. Perform matrix multiplication. > > It seems to me that perhaps numpy should be able to help me with this. > However, I can only figure out how to do 1 and 4 using numpy. Meybe > someone knows a way to use numpy for 2 and 3? If not, what Python > package helps me with geometry related tasks such as 2 and 3? > > Any help here would be greatly appreciated! > > Regards, > Mattias > As Paul is hinting, your best bet is to make use of quaternions, you will save yourself a lot of frustration as soon as you need to do anything with them outside of matrix-multiplying a bunch of 3D coordinates. See the Scientific Python module: Scientific.Geometry.Quaternion. To make a matrix from Quaternion, q, use "q.asRotations().tensor". To make a quaternion from an axis and an angle, here is what I use: ### # axis_angle_to_quaternion() ### def axis_angle_to_quaternion(axis, angle): """ Takes an I{axis} (3x1 array) and an I{angle} (in degrees) and returns the rotation as a I{Scientific.Geometry.Quaternion.Quaternion}. @param axis: 3x1 array specifiying an axis @type axis: numarray.array @param angle: C{float} specifying the rotation around I{axis} @type angle: float @return: a I{Quaternion} from an I{axis} and an I{angle} @rtype: Quaternion """ axis = normalize(axis) angle = math.radians(float(angle)) qx = float(axis[0]) qy = float(axis[1]) qz = float(axis[2]) sin_a = math.sin(angle / 2.0) cos_a = math.cos(angle / 2.0) qx = qx * sin_a qy = qy * sin_a qz = qz * sin_a qw = cos_a return Quaternion(qw, qx, qy, qz).normalized() See your linear algebra text on how to normalize a 1x3 vector. James -- http://mail.python.org/mailman/listinfo/python-list
Re: Vector, matrix, normalize, rotate. What package?
On Feb 27, 2:49 pm, "Mattias Brändström" <[EMAIL PROTECTED]> wrote: > I'm trying to find what package I should use if I want to: > > 1. Create 3d vectors. > 2. Normalize those vectors. > 3. Create a 3x3 rotation matrix from a unit 3-d vector and an angle in > radians. > 4. Perform matrix multiplication. You should have good luck with cgkit. If you are having trouble getting a compile of v2, there is an older v1 that is pure python. There are various implementations all around the net, but I'm not sure of anything standalone and actually released. -- http://mail.python.org/mailman/listinfo/python-list
Re: Vector, matrix, normalize, rotate. What package?
"Mattias Brändström" <[EMAIL PROTECTED]> writes: > I'm trying to find what package I should use if I want to: > 1. Create 3d vectors. > 2. Normalize those vectors. > 3. Create a 3x3 rotation matrix from a unit 3-d vector and an angle in > radians. > 4. Perform matrix multiplication. If this is a math exercise, just use plain python and code it all by hand, there's not much to it. You might also like to read about quaternion multiplication--if you read German, the German Wikipedia article looks more helpful than the English one about that. http://de.wikipedia.org/wiki/Quaternion -- http://mail.python.org/mailman/listinfo/python-list
Vector, matrix, normalize, rotate. What package?
Hello! I'm trying to find what package I should use if I want to: 1. Create 3d vectors. 2. Normalize those vectors. 3. Create a 3x3 rotation matrix from a unit 3-d vector and an angle in radians. 4. Perform matrix multiplication. It seems to me that perhaps numpy should be able to help me with this. However, I can only figure out how to do 1 and 4 using numpy. Meybe someone knows a way to use numpy for 2 and 3? If not, what Python package helps me with geometry related tasks such as 2 and 3? Any help here would be greatly appreciated! Regards, Mattias -- http://mail.python.org/mailman/listinfo/python-list