Je me suis gratté la tête à propos de la précision d'une rotation de 2 jours en numpy. La mise en œuvre est manuel, et mon application appelle un système gaucher, donc:Y a-t-il quelque chose d'inexact dans cette implémentation d'une rotation 2-D en numpy?
from numpy import sin, cos
def rotate(pathx, pathy, r):
"""
pathx and pathy are lists of np.float64's recording x and y
coordinates of points to be rotated
"""
c = cos(r)
s = sin(r)
pathx = c*pathx + s*pathy
pathy = -s*pathx + c*pathy
Pour tester cela, je nourris dans pathx=[1]
et pathy=[1]
et r=arctan2(1,1)~=pi/4~=0.78539816339744828
avec le résultat attendu que le vecteur (1,1) serait être aligné avec l'axe des x après avoir été tourné par pi/4
Je reçois [1.4142135623730949, -0.29289321881345221]
. La raison pour laquelle cela semble absurde est parce que je m'attendais à beaucoup plus plus proche de 0.0
sur la coordonnée y. J'ai également essayé de booster les choses en faisant à la fois les entrées et les sorties sin, cos et arctan2 toutes dtype=float64
, mais cela ne faisait aucune différence.
Est-ce que je fais une erreur stupide? Ou y a-t-il une instabilité numérique que j'aurais dû anticiper? Je ne peux pas croire que l'ampleur de l'erreur ...
ugh! C'est tout! En regardant tous les mauvais endroits. Merci de votre aide pour faire demi-tour. – rschwieb
@rschwieb De rien, bonne chance. – miradulo