Convert Vec3() to integer?


#1

Hello,

maybe the question is trivial, but is there any function to convert a Vec3() to int?

Vec3(1.2, 2.33, 10.123) --> (1, 2, 10)

I know I can use int() or math.floor() but they work on float, not integer.
Since there are many operations that work on vectors out-of-the-box (like +, *, etc…) I wish to know if I can convert Vec3() to int?

Another question: maybe exists a Vec3i()?
(vector 3 containing integer values?)

Thank you for your help!


#2

Simple helper function:

def intvec(vec3):
    return int(vec3.getX()), int(vec3.getY()), int(vec3.getZ())

Example use:

from panda3d.core import Vec3

def intvec(vec3):
    return int(vec3.getX()), int(vec3.getY()), int(vec3.getZ())

s = Vec3(1.1, 2.2, 3.3)
print intvec(s) == (1, 2, 3) # will be True

#3

Unless by “convert a Vec3() to int” you mean “make the components of a Vec3() integers”…in which case you will have to do the above but then add a line to convert the tuple of ints back into a Vec3 instance. Really though, if that’s the case then don’t bother - find a way to ignore the non-ints coming out of the Vec3, or make them ints before they are in the Vec3.


#4

Ok, thank you. I used that solution but I wished a method such this one:

newVec = math.vec_to_int(myVecFloat)

I will do as you suggested, thanks!


#5
vec_to_int = lambda v: (int(v.x), int(v.y), int(v.z))

newVec = vec_to_int(myVecFloat)

#6

Python docet. Great piece of code.
Thank you!


#7

Another one, works with vectors of any dimension (e.g. 2,3,4):

vi = map(int, v)

#8

Oo, I like that one. Very clever.


#9

Wow! I love Lisp, and I didn’t know Python had a “map” function (functional-language style ) :smiley: