J'ai des angles qui forment un tour complet dans un tableau x
, de -90 à 270 par ex. (Il peut être défini autrement, comme de 0 à 360 ou -180 à 180) avec l'étape 1 ou autre.Les valeurs complètes de virage x angle sont mappées à demi-tour à l'aide de la fonction asin, comment les mettre en miroir?
asin
La fonction est valide uniquement entre -90 et +90.
Ainsi, les angles < -90 ou> 90 seraient "mappés" entre ces valeurs.
E.g. y
= some_asin_func (over_sin (x
)) se retrouvera dans une valeur y
toujours comprise entre -90 et +90. Donc, y
est coincé entre -90 et +90.
Je dois récupérer auquel x-entrée est y
liée, car il est encore ambigu: par exemple, la fonction plus (x
) donnera les mêmes valeurs pour y
x = 120
et x = 60
ou x = -47
et x = 223
. Ce qui n'est pas ce que je veux.
Mettez une autre façon; J'ai besoin de y
faire un tour complet comme x
fait, allant de x
commence à se termine.
Une image sera mieux:
Ici, x
est comprise entre -90 (gauche) à 270 (à droite du graphique).
La partie valide de la courbe est comprise entre x=-90
et x=+90
(moitié gauche du graphique).
Toutes les autres valeurs sont similaires à celles de y = 90 ou y=-90
.
Pour x=180
par exemple, j'ai obtenu y=0
et il devrait être y=180
.
Pour x=270
, j'ai y=-90
mais il devrait être y=270
, donc +360.
Voici un exemple de code:
A = 50 # you can make this value vary to have different curves like in the images, when A=0 -> shape is triangle-like, when A=90-> shape is square-like.
x = np.linspace(-90,270,int(1e3))
u = np.sin(math.pi*A/180)*np.cos(math.pi*x/180)
v = 180*(np.arcsin(u))/math.pi
y = 180*np.arcsin(np.sin(math.pi*x/180)/np.cos(math.pi*v/180))/math.pi
plt.plot(x,y)
plt.grid(True)
Encore une fois, la première moitié gauche du graphique est tout à fait correct. La moitié droite est également correct dans son comportement, mais en finale, ici, il doit être mis en miroir autour d'un axe horizontal à la position y=+90
quand x>90
, comme ceci:
C'est, il est comme la fonction se reflète environ y = -90 et y = + 90 pour y
où x
est hors de l'intervalle [-90, + 90] et que lorsque x
où est hors de l'intervalle [-90, + 90].
Je veux un miroir en dehors de la validité [-90, + 90] Plage:
à propos y=-90
où y
est inférieur à -90
sur les y=+90
où y
est supérieure à +90
Et bien sûr, modulo chaque tour complet.
Voici un autre exemple où x
est comprise entre -180 et 180 et le comportement souhaité:
Or:
recherchés:
Je premier testé quelque chose de simple en ce moment:
A = 50
x = np.linspace(-180,180,int(1e3))
u = np.sin(math.pi*A/180)*np.cos(math.pi*x/180)
v = 180*(np.arcsin(u))/math.pi
y = 180*np.arcsin(np.sin(math.pi*x/180)/np.cos(math.pi*v/180))/math.pi
for i,j in np.ndenumerate(x):
xval = (j-180)%180-180
if (xval < -90):
y[i] = y[i]-val
elif (xval > 90):
y[i] = y[i]+val
plt.plot(x,y);
plt.grid(True)
plt.show()
qui ne fonctionne tout mais je pense pas que l'idée de fond est là ...
je pense que ce peut être un certain genre de truc modulo mais ne peut pas comprendre.
Je ne suis pas sûr de comprendre ce que vous essayez de faire. Voulez-vous des paires de x-y sur un cercle d'unité en fonction de l'angle en coordonnées polaires? –
On pourrait voir Backgroud comme si je voulais récupérer une étoile azimutale (mesurée sur un plan horizontal) en fonction de son angle sur le plan équatorial sur lequel elle se déplace, par rapport au nord. J'ai donc besoin de récupérer les valeurs 0-360 y-entières en fonction de la fonction sur les autres valeurs x 0-360. –
Ai-je bien compris le cœur de la question: vous voulez définir une courbe comme dans le second graphique? – kazemakase