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:

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:

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...
_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++;
};
- _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++;
- };