Mercurial > touhou
diff pytouhou/utils/vector.pyx @ 524:7f016dfbdfb1
Make vector a struct, allocate it directly on the stack, and thus pass it by copy, which is much less expensive than a python allocation.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 18 Dec 2013 18:15:40 +0100 |
parents | cb5c68598ab0 |
children |
line wrap: on
line diff
--- a/pytouhou/utils/vector.pyx +++ b/pytouhou/utils/vector.pyx @@ -13,23 +13,13 @@ ## from libc.math cimport sqrt - - -cdef class Vector: - def __init__(self, float x, float y, float z): - self.x = x - self.y = y - self.z = z +cimport cython - cdef Vector sub(self, Vector other): - cdef float x, y, z - - x = self.x - other.x - y = self.y - other.y - z = self.z - other.z - - return Vector(x, y, z) +cdef Vector sub(Vector vec1, Vector vec2): + return Vector(vec1.x - vec2.x, + vec1.y - vec2.y, + vec1.z - vec2.z) cdef Vector cross(Vector vec1, Vector vec2): @@ -38,10 +28,11 @@ cdef Vector cross(Vector vec1, Vector ve vec1.x * vec2.y - vec2.x * vec1.y) -cdef float dot(Vector vec1, Vector vec2): +cdef float dot(Vector vec1, Vector vec2) nogil: return vec1.x * vec2.x + vec2.y * vec1.y + vec1.z * vec2.z +@cython.cdivision(True) cdef Vector normalize(Vector vec): cdef float normal