Charles Sanders schreef: > Roel Schroeven wrote: >> I might be wrong of course, but can't you just use atan2? Only problem >> is that it returns negative angles for quadrants 3 and 4, but that is >> easily solved. In Python: >> >> from math import atan2, pi, fmod >> def vectorAngle(x, y): >> return fmod(atan2(y, x) + 2*pi, 2*pi) >> >> No conditionals in sight. >> > > Yes, but there will be some conditionals for special > cases in the implementation of atan2().
That's true, but the user of the atan2() doesn't need to concern himself with it; that's what I meant with 'in sight'. > > I am pretty sure that in Python (and Perl) atan2() is > the C atan2() from the C math library, also often used by > Fortran. I'm pretty sure too: the Python 2.4 documentation says "The math module consists mostly of thin wrappers around the platform C math library functions." > This is normally written in assembler for the individual > architecture by the hardware vendor or compiler writer, is usually > heavily optimized, carefully handles all the corner cases, and > often carries extra precision to ensure accuracy. Yep, and that's why I prefer using that instead of trying to roll my own. And because it leverages the speed of the FPU on platforms where it is implemented in hardware. I believe the FPU's of the i386 family have it in their instruction set. I even believe there are no instructions for asin, atan and acos; they are all calculated using FPATAN which calculates atan2. -- If I have been able to see further, it was only because I stood on the shoulders of giants. -- Isaac Newton Roel Schroeven -- http://mail.python.org/mailman/listinfo/python-list