1. 内容简介
- get_angle.py:python编写代码,使用 python的math库。
- get_angle_1.pyx:cython编写代码,使用python的math库。
- get_angle_2.pyx:cython编写代码, 使用cython封装的math库。
1. 代码:
get_angle.py
import math
def get_angle(x,y):
angle = 123
if y == 0 :
if x < 0:
angle = 180
else:
angle = 0
if x == 0 :
if y > 0:
angle = 90
else:
angle = 270
else:
tan_yx = abs(y)/abs(x)
if y > 0 and x < 0:
angle = 180 - math.atan(tan_yx)*180/math.pi #90-180
elif y > 0 and x > 0:
angle = math.atan(tan_yx)*180/math.pi #0-90
elif y < 0 and x < 0:
angle = 180 + math.atan(tan_yx)*180/math.pi #180-270
elif y < 0 and x > 0:
angle = 360- math.atan(tan_yx)*180/math.pi #270-360
return angle
get_angle_1.py
cimport cython
import math
@cython.boundscheck(False)
@cython.wraparound(False)
cdef float _get_angle(float x, float y):
cdef float angle
cdef float tan_yx
angle = 123
if y == 0 :
if x < 0:
angle = 180
else:
angle = 0
if x == 0 :
if y > 0:
angle = 90
else:
angle = 270
else:
tan_yx = abs(y)/abs(x)
if y > 0 and x < 0:
angle = 180 - math.atan(tan_yx)*180/math.pi #90-180
elif y > 0 and x > 0:
angle = math.atan(tan_yx)*180/math.pi #0-90
elif y < 0 and x < 0:
angle = 180 + math.atan(tan_yx)*180/math.pi #180-270
elif y < 0 and x > 0:
angle = 360- math.atan(tan_yx)*180/math.pi #270-360
return angle
def get_angle(x, y):
return _get_angle(x, y)
get_angle_2.py
cimport cython
from libc.math cimport abs
from libc.math cimport atan
@cython.boundscheck(False)
@cython.wraparound(False)
cdef float _get_angle(float x, float y):
cdef float angle
cdef float tan_yx
cdef float pi = 3.1415926535898
angle = 123
if y == 0 :
if x < 0:
angle = 180
else:
angle = 0
if x == 0 :
if y > 0:
angle = 90
else:
angle = 270
else:
tan_yx = abs(y)/abs(x)
if y > 0 and x < 0:
angle = 180 - atan(tan_yx)*180/ pi #90-180
elif y > 0 and x > 0:
angle = atan(tan_yx)*180/ pi #0-90
elif y < 0 and x < 0:
angle = 180 + atan(tan_yx)*180/pi #180-270
elif y < 0 and x > 0:
angle = 360- atan(tan_yx)*180/pi #270-360
return angle
def get_angle(x, y):
return _get_angle(x, y)