[Python-ideas] Trigonometry in degrees
Ryan Gonzalez
rymg19 at gmail.com
Thu Jun 7 16:21:56 EDT 2018
You could always do e.g. math.sin(math.degress(radians)) and so forth...
On June 7, 2018 3:07:21 PM Robert Vanden Eynde
<robertvandeneynde at hotmail.com> wrote:
> I suggest adding degrees version of the trigonometric functions in the math
> module.
>
> - Useful in Teaching and replacing calculators by python, importing
> something is seen by the young students much more easy than to define a
> function.
>
> - Special values could be treated, aka when the angle is a multiple of 90,
> young students are often surprise to see that cos(pi/2) != 0
>
> Testing for a special value Isn't very costly (x % 90 == 0) but it could be
> pointed out that there is a small overhead using the "degrees" equivalent
> of trig function because of the radians to degrees conversion And the
> special values testing.
>
> - Standard names will be chosen so that everyone will use the same name
> convention. I suggest adding a "d" like sind, cosd, tand, acosd, asind,
> atand, atan2d.
>
> Another option would be to add "deg" or prepend "d" or "deg" however the
> name should be short.
>
> sind, dsin, sindeg or degsin ?
>
> We can look in other languages what they chose.
>
> Creating a new package like 'from math.degrees import cos' however I would
> not recommend that because "cos" in the source code would mean to lookup
> the import to know if it's in degrees or radians (and that leads to very
> filthy bugs). Also "degrees" is already so the name would have to change
> the name of the package.
>
> - Also in the cmath module. Even though the radians make more sense in the
> complex plane. The same functions sin cos tan, asin acos atan, alongside
> with phase and polar.
>
> Here's my current implementation :
>
> def cosd(x):
> if x % 90 == 0:
> return (1, 0, -1, 0)[int(x // 90) % 4]
> else:
> return cos(radians(x))
>
> def sind(x):
> if x % 90 == 0:
> return (0, 1, 0, -1)[int(x // 90) % 4]
> else:
> return sin(radians(x))
>
> def tand(x):
> if x % 90 == 0:
> return (0, float('inf'), 0, float('-inf'))[int(x // 90) % 4]
> else:
> return tan(radians(x))
>
> The infinity being positive of negative is debatable however, here I've
> chosen the convention lim tan(x) as x approaches ±90° from 0
>
> def acosd(x):
> if x == 1: return 0
> if x == 0: return 90
> if x == -1: return 180
> return degrees(acos(x))
>
> def asind(x):
> if x == 1: return 90
> if x == 0: return 0
> if x == -1: return -90
> return degrees(asin(x))
>
> However, currently [degrees(acos(x)) for x in (1,0,-1)] == [0, 90, 180] on
> my machine so maybe the test isn't necessary.
>
> Testing for Special values of abs(x) == 0.5 could be an idea but I don't
> think the overhead is worth the effort.
>
> Probably this has already been discussed but I don't know how to check that.
>
>
> ----------
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20180607/528e16af/attachment-0001.html>
More information about the Python-ideas
mailing list