[Python-ideas] Trigonometry in degrees
Neil Girdhar
mistersheik at gmail.com
Sun Jun 10 06:50:45 EDT 2018
I think this suggestion should result in a library on PyPi, which can then
be considered for the standard library if it sees a lot of use.
Also, modern OpenGL does this just like Python does: all of the
trigonometric functions take radians and a "radians" function is provided.
Best,
Neil
On Saturday, June 9, 2018 at 2:55:12 PM UTC-4, Robert Vanden Eynde wrote:
>
> Indeed what we need for exact math for multiple of 90 (and 30) is ideas
> from the symbolic libraries (sympy, sage).
>
> Of course the symbolic lib can do more like :
>
> sage: k = var('k', domain='integer')
> sage: cos(1 + 2*k*pi)
> cos(1)
> sage: cos(k*pi)
> cos(pi*k)
> sage: cos(pi/3 + 2*k*pi)
> 1/2
>
> But that would concern symbolic lib only I think.
>
> For the naming convention, scipy using sindg (therefore Nor sind nor
> sindeg) will make the sind choice less obvious. However if Matlab and Julia
> chooses sind that's a good path to go, Matlab is pretty popular, as other
> pointed out, with Universities giving "free" licences and stuff. With that
> regards, scipy wanting to "be a replacement to Matlab in python and open
> source" it's interesting they chose sindg and not the Matlab name sind.
>
> For the "d" as suffix that would mean "d" as "double" like in opengl.
> Well, let's remember that in Python there's only One floating type, that's
> a double, and it's called float... So python programmers will not think
> "sind means it uses a python float and not a python float32 that C99 sinf
> would". Python programmers would be like "sin takes float in radians, sind
> takes float in degrees or int, because int can be converted to float when
> there's no overflow".
>
> Le sam. 9 juin 2018 à 04:09, Wes Turner <wes.t... at gmail.com <javascript:>>
> a écrit :
>
>> # Python, NumPy, SymPy, mpmath, sage trigonometric functions
>> https://en.wikipedia.org/wiki/Trigonometric_functions
>>
>> ## Python math module
>> https://docs.python.org/3/library/math.html#trigonometric-functions
>> - degrees(radians): Float degrees
>> - radians(degrees): Float degrees
>>
>> ## NumPy
>>
>> https://docs.scipy.org/doc/numpy/reference/routines.math.html#trigonometric-functions
>> - degrees(radians) : List[float] degrees
>> - rad2deg(radians): List[float] degrees
>> - radians(degrees) : List[float] radians
>> - deg2rad(degrees): List[float] radians
>>
>> https://docs.scipy.org/doc/numpy/reference/generated/numpy.sin.html
>>
>>
>> ## SymPy
>>
>> http://docs.sympy.org/latest/modules/functions/elementary.html#sympy-functions-elementary-trigonometric
>>
>> http://docs.sympy.org/latest/modules/functions/elementary.html#trionometric-functions
>>
>> - sympy.mpmath.degrees(radians): Float degrees
>> - sympy.mpmath.radians(degrees): Float radians
>>
>> - https://stackoverflow.com/questions/31072815/cosd-and-sind-with-sympy
>> - cosd, sind
>> -
>> https://stackoverflow.com/questions/31072815/cosd-and-sind-with-sympy#comment50176770_31072815
>>
>> > Let x, theta, phi, etc. be Symbols representing quantities in
>> radians. Keep a list of these symbols: angles = [x, theta, phi]. Then, at
>> the very end, use y.subs([(angle, angle*pi/180) for angle in angles]) to
>> change the meaning of the symbols to degrees"
>>
>>
>> ## mpmath
>> http://mpmath.org/doc/current/functions/trigonometric.html
>> - sympy.mpmath.degrees(radians): Float degrees
>> - sympy.mpmath.radians(degrees): Float radians
>>
>>
>> ## Sage
>>
>> https://doc.sagemath.org/html/en/reference/functions/sage/functions/trig.html
>>
>>
>>
>> On Friday, June 8, 2018, Robert Vanden Eynde <robertva... at hotmail.com
>> <javascript:>> wrote:
>>
>>> - Thanks for pointing out a language (Julia) that already had a name
>>> convention. Interestingly they don't have a atan2d function. Choosing the
>>> same convention as another language is a big plus.
>>>
>>> - Adding trig function using floats between 0 and 1 is nice, currently
>>> one needs to do sin(tau * t) which is not so bad (from math import tau, tau
>>> sounds like turn).
>>>
>>> - Julia has sinpi for sin(pi*x), one could have sintau(x) for sin(tau*x)
>>> or sinturn(x).
>>>
>>> Grads are in the idea of turns but with more problems, as you guys said,
>>> grads are used by noone, but turns are more useful. sin(tau * t) For The
>>> Win.
>>>
>>> - Even though people mentionned 1/6 not being exact, so that advantage
>>> over radians isn't that obvious ?
>>>
>>> from math import sin, tau
>>> from fractions import Fraction
>>> sin(Fraction(1,6) * tau)
>>> sindeg(Fraction(1,6) * 360)
>>>
>>> These already work today by the way.
>>>
>>> - As you guys pointed out, using radians implies knowing a little bit
>>> about floating point arithmetic and its limitations. Integer are more
>>> simple and less error prone. Of course it's useful to know about floats but
>>> in many case it's not necessary to learn about it right away, young
>>> students just want their player in the game move in a straight line when
>>> angle = 90.
>>>
>>> - sin(pi/2) == 1 but cos(pi/2) != 0 and sin(3*pi/2) != 1 so sin(pi/2) is
>>> kind of an exception.
>>>
>>>
>>>
>>>
>>> Le ven. 8 juin 2018 à 09:11, Steven D'Aprano <st... at pearwood.info
>>> <javascript:>> a écrit :
>>>
>>>> On Fri, Jun 08, 2018 at 03:55:34PM +1000, Chris Angelico wrote:
>>>> > On Fri, Jun 8, 2018 at 3:45 PM, Steven D'Aprano <st... at pearwood.info
>>>> <javascript:>> wrote:
>>>> > > Although personally I prefer the look of d as a prefix:
>>>> > >
>>>> > > dsin, dcos, dtan
>>>> > >
>>>> > > That's more obviously pronounced "d(egrees) sin" etc rather than
>>>> "sined"
>>>> > > "tanned" etc.
>>>> >
>>>> > Having it as a suffix does have one advantage. The math module would
>>>> > need a hyperbolic sine function which accepts an argument in; and
>>>> > then, like Charles Napier [1], Python would finally be able to say "I
>>>> > have sindh".
>>>>
>>>> Ha ha, nice pun, but no, the hyperbolic trig functions never take
>>>> arguments in degrees. Or radians for that matter. They are "hyperbolic
>>>> angles", which some electrical engineering text books refer to as
>>>> "hyperbolic radians", but all the maths text books I've seen don't call
>>>> them anything other than a real number. (Or sometimes a complex number.)
>>>>
>>>> But for what it's worth, there is a correspondence of a sort between
>>>> the
>>>> hyperbolic angle and circular angles. The circular angle going between
>>>> 0
>>>> to 45° corresponds to the hyperbolic angle going from 0 to infinity.
>>>>
>>>> https://en.wikipedia.org/wiki/Hyperbolic_angle
>>>>
>>>> https://en.wikipedia.org/wiki/Hyperbolic_function
>>>>
>>>>
>>>> > [1] Apocryphally, alas.
>>>>
>>>> Don't ruin a good story with facts ;-)
>>>>
>>>>
>>>>
>>>> --
>>>> Steve
>>>> _______________________________________________
>>>> Python-ideas mailing list
>>>> Python... at python.org <javascript:>
>>>> https://mail.python.org/mailman/listinfo/python-ideas
>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>>
>>> _______________________________________________
>> Python-ideas mailing list
>> Python... at python.org <javascript:>
>> 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/20180610/a8c26f4d/attachment-0001.html>
More information about the Python-ideas
mailing list