2016-02-28 3 views
0

J'ai une particule à une position fixe X et une amplitude fixe AMP qui se déplace sur une onde sinusoïdale. Je voudrais être en mesure de changer dynamiquement la période de l'onde sinusoïdale cible SANS déplacer la particule. (Quand je change la période, sa position X ne s'aligne pas à la même position Y du graphique avec une période différente, donc il saute partout.)Obtenir des points d'intersection avec une onde sinusoïdale

J'ai une solution pour cela - Trouvez où le le graphe avec la nouvelle période croise le graphe de l'ancienne période et crée un décalage X, alignant ces deux chiffres vers le haut

Pour tout y donné sur une onde sinusoïdale, il y aura 2 valeurs X correspondantes par période. essaie d'obtenir ces deux valeurs. Je vais ensuite comparer les dérivés de choisir celui que je veux.

Cependant, je ne sais pas comment ces deux valeurs. Toutes les idées?

est ici une image de ce que je suis après: Sin Wave Logic

+0

Uhmm - Math.Asin? –

+0

Je pense que c'est plus lié aux programmeurs ou aux sites de maths qu'à stackoverflow. – Alexei

+0

Notez les équations. Vous avez 'y = A sin (w x + p)'. Vous souhaitez trouver un p pour un w donné tel que x et y ont des valeurs particulières. Vous avez une équation avec quatre variables, dont trois sont connues, écrivez donc les équations, résolvez la variable restante que vous voulez. Vous devrez utiliser la fonction arcsin. –

Répondre

0

Si vous avez une onde sinusoïdale définie par

y = sin(a*(x+c))+d 

alors vous pouvez inverser par

x = (arcsin(y-d)-c)/a 

pour donné une .

On obtient ainsi la solution dans la plage de [-pi, pi]

L'autre solution que vous recherchez est alors 2*pi-x

+0

Mon onde sinus est définie par: 'y = a * sin (p * (x + c)) + d' Donc, ma dernière équation serait-elle réellement:' x = arcsin ((yd)/a)/p - c 'Ou mon onde de péché devrait-elle être définie par:' y = a * sin ((p * c) + x) + d? 'Merci de votre patience. –

+0

@KeenanRebera Vous pouvez le définir en premier et votre équation finale est en effet 'x = arcsin ((y-d)/a)/p - c', comme vous l'avez écrit. – Ctx

+0

J'ai exécuté un certain code de test sur l'algorithme et il semble vraiment très proche. Important: Si je change la valeur de x le décalage change de manière appropriée. Cependant, l'effet réel que je vais faire ici est de «comprimer un slinky» où l'une des extrémités (Say the end sur l'axe des ordonnées) ne bouge jamais, et le reste se comprime à l'envers. Cette solution est vraiment proche, mais je ne sais pas quoi faire ensuite. –

0

Si vous permettez un peu de triche, vous pouvez utiliser un cross-fading effet d'obtenir une transition en douceur à partir de f (t) à g (t) par l'intermédiaire d'

h(s,t)=(1-s)*f(t)+s*g(t) 

tout en s en fonction de t est compris entre 0 et 1 et en utilisant quelque chose comme

y = h((t-ts)/d, t) 

pour la période allant de ts à ts+d.