Trigonometry aider!

  • Lord Sivell
  • Novice
  • Novice
  • No Avatar
  • Inscription: Déc 08, 2003
  • Messages: 32
  • Loc: Australia
  • Status: Offline

Message Décembre 14th, 2003, 2:56 am

Le problème est le suivant:
J'ai un MovieClip (le bleu) qui doit faire face à la cible, elle va. Je sais que je dois utiliser déclenchement, mais je ne sais pas comment l'obtenir au travail.

Sur le papier, j'ai travaillé à ce que le code à l'intérieur du bleu MovieClip choses devrait ressembler à quelque chose comme ceci:

A = _x la différence entre le bleu et le clip clip cible;
O = _Y la différence entre le bleu et le clip clip cible;
/ / (Comme dans un côté et en face o)
cet. _rotation = tan / * à la puissance de -1 * / * (O / A);

Mon plus grand problème est la méthode de bronzage: tan ( angle ) Dans ce cas, je ne peux pas obtenir d'être à la puissance de -1.

Eh bien, si tout ce qui fait de tout sens de l'aide serait grandement appréciée:
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Décembre 14th, 2003, 2:56 am

  • Voetsjoeba
  • Novice
  • Novice
  • Avatar de l’utilisateur
  • Inscription: Nov 21, 2003
  • Messages: 31
  • Loc: Belgium, Ghent.
  • Status: Offline

Message Décembre 14th, 2003, 5:39 am

Si vous avez la distance Y et la distance x, vous pouvez facilement obtenir l'angle de qu'en utilisant le atan ou la méthode atan2. Je préfère personnellement utiliser atan. Il fonctionne comme ceci:

Math.atan (ydistance / distance_x)

Mais, vous devez prendre note que deux angles peuvent avoir la même tangente (par exemple, 45 degrés et 45 180 diplômes ont la même tangente). Par conséquent, il peut être à la fois ces angles, vous devez donc vérifier si vous avez cliqué sur le point fixe à droite de votre MovieClip ou vers la gauche. Cela fera en sorte quel coin il est.

Je n'ai pas le temps maintenant, mais mal faire quelques dessins pour vous ce soir afin que vous puissiez comprendre. Je n'ai pas le temps maintenant de fournir quelques exemples de code, donc c'est effectivement une courte explication. Plus grande, sera en place, ce soir, accroche-toi gif "alt =";)" title =" Wink "/>

Disons que vous avez votre angle en utilisant une instruction if si votre point est à gauche ou à droite de la MovieClip bleu et la méthode atan. Ensuite, vous devez le convertir en degrés (Flash utilise radians, basé sur l'IP: 180 ° = pi), pour pouvoir utiliser la propriété _rotation.

Pi radians = 180 degrés
<=> 1 rayonnante = 180 / PI degrés

Donc notre fonction de conversion sera le suivant:

Code: [ Select ]
Math.convertToDegrees = function(radians){
return radians*(180/Math.PI);
}
  1. Math.convertToDegrees = function(radians){
  2. return radians*(180/Math.PI);
  3. }


Utilisez cette méthode sur l'angle que vous obtenu en calculant atan, et vous avez votre degrés pour faire pivoter à :)
  • Voetsjoeba
  • Novice
  • Novice
  • Avatar de l’utilisateur
  • Inscription: Nov 21, 2003
  • Messages: 31
  • Loc: Belgium, Ghent.
  • Status: Offline

Message Décembre 14th, 2003, 11:29 am

Ok, on y va. Comme vous le savez, la tangente d'un angle, son sinus est divisé par son cosinus. Sur le cercle goniométriques (de rayon 1), on peut voir la tangente:

Image

Parce que les triangles ABC et AED sont congruents, la relation entre CB et BA est la même que celle qui existe entre la DE et DA. CB est le sinus de l'angle μ, et BA est son cosinus. (côté opposé / hypoténuse avec hypoténuse == 1, c'est la même chose pour le cosinus). Nos EQUASION devient:

μ sin / cos μ μ = tan / 1. Qui est correct. Tangente vient du latin tangere mot en passant, ce qui signifie toucher. C'est exactement ce que la tangente fait: il touche le côté du cercle.

Math.atan () est utilisée avec y / x: Math.atan (ydistance / distance_x). C'est parce que vous devez fournir la tangente pour calculer l'angle de, et la tangente est sin / cos, là où le péché est sur le Y (vertical) et cos est sur le x (horizontal) axe.

Mais, theres un mais. Deux angles peuvent avoir la même tangente:
Image
Lors du calcul de l'arc tangente (atan == == tan ^ -1), Flash sera de retour l'angle sur le côté droit du triangle. Mais cela signifie que si notre point est dans la partie gauche du cercle, Flash sera de retour l'angle sur le côté droit qui a la même tangente.

Par conséquent, nous devons vérifier si notre point est à la gauche ou à droite de notre cercle. Si son à gauche, nous devrons ajouter 180 °, de sorte Math.PI, car Flash utilise radians.

Une autre chose à prendre en compte est que Flash ne va pas au contraire des aiguilles autour du cercle, mais dans le sens horaire. Et, que les biens _rotation ne va pas de 0 à 360, mais de -180 à 180. Donc, nous ne pouvons pas avoir un clip pivoter à 225 ° en utilisant _rotation = 225. Nous devons soustraire 360 à partir de cette valeur pour le rendre négatif, puis le faire pivoter à ce chiffre négatif.

Heres un FLA pour vous qui met toute cette théorie en pratique. Apprécier :)

Et Ive a ajouté le code ici...

Code: [ Select ]
_global.d = 0;
_global.angle = 0;
pointer._rotation = 0;
Math.convertToDegrees = function(radians) {
    return radians*(180/Math.PI);
};
MovieClip.prototype.rotateTo = function(to){
    to > 180 ? to-=360 : null
    this.onEnterFrame = function(){
        this._rotation = to-(to-this._rotation)/1.2
        this._rotation > to-1 && this._rotation < to+1 ? delete this.onEnterFrame : null
    }
}
this.onMouseDown = function() {
    mc = this.attachMovie("dot","dot"+d,d)
    mc._x = this._xmouse
    mc._y = this._ymouse
    var diffX = this._xmouse-pointer._x;
    var diffY = this._ymouse-pointer._y;
    diffX>=0 ? _global.angle = Math.atan(diffY/diffX) : _global.angle = Math.PI+Math.atan(diffY/diffX);
    pointer.rotateTo(Math.convertToDegrees(angle));
    _global.d++;
};
  1. _global.d = 0;
  2. _global.angle = 0;
  3. pointer._rotation = 0;
  4. Math.convertToDegrees = function(radians) {
  5.     return radians*(180/Math.PI);
  6. };
  7. MovieClip.prototype.rotateTo = function(to){
  8.     to > 180 ? to-=360 : null
  9.     this.onEnterFrame = function(){
  10.         this._rotation = to-(to-this._rotation)/1.2
  11.         this._rotation > to-1 && this._rotation < to+1 ? delete this.onEnterFrame : null
  12.     }
  13. }
  14. this.onMouseDown = function() {
  15.     mc = this.attachMovie("dot","dot"+d,d)
  16.     mc._x = this._xmouse
  17.     mc._y = this._ymouse
  18.     var diffX = this._xmouse-pointer._x;
  19.     var diffY = this._ymouse-pointer._y;
  20.     diffX>=0 ? _global.angle = Math.atan(diffY/diffX) : _global.angle = Math.PI+Math.atan(diffY/diffX);
  21.     pointer.rotateTo(Math.convertToDegrees(angle));
  22.     _global.d++;
  23. };
  • Lord Sivell
  • Novice
  • Novice
  • No Avatar
  • Inscription: Déc 08, 2003
  • Messages: 32
  • Loc: Australia
  • Status: Offline

Message Décembre 14th, 2003, 4:57 pm

Whoa! Je ne pense pas que ce serait compliqué. Merci pour l'aide mauvais faire un essai et voir ce que je reçois :?
  • Voetsjoeba
  • Novice
  • Novice
  • Avatar de l’utilisateur
  • Inscription: Nov 21, 2003
  • Messages: 31
  • Loc: Belgium, Ghent.
  • Status: Offline

Message Décembre 15th, 2003, 3:59 am

Ce n'est pas du tout compliqué :) Une fois que vous aurez le coup de la trigonométrie, il est facile comme bonjour ;)

Afficher de l'information

  • Total des messages de ce sujet: 5 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 39 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC