Моя тригонометрия всегда возвращает 90 градусов, несмотря на то, что моя формула кажется правильной, и мои переменные работают правильно - PullRequest
0 голосов
/ 16 февраля 2012

Я пишу простую флеш игру, для которой требуется вычислить угол между одним объектом и другим. Я проверил, и мои переменные кажутся правильными, и я знаю, что моя формула закона косинусов верна. Тем не менее, он всегда возвращает 90 градусов. Может быть, вы, ребята, видите, что с этим не так. Кстати, я использовал мышь вместо объекта в качестве контрольной точки.

onClipEvent (enterFrame) {

var xdiff:Number = Math.abs(_root._xmouse - this._x);
var ydiff:Number = Math.abs(_root._ymouse  - this._y);
var xd2:Number = xdiff * xdiff;
var yd2:Number = ydiff * ydiff;
var hypot:Number = Math.sqrt(xd2+yd2);
var angle:Number = Math.acos((xd2 + yd2 - hypot * hypot) / (2*xdiff * ydiff))*180/Math.PI ;

trace("xdiff:"+xdiff);
trace("ydiff:"+ydiff);
trace("xd2:"+xd2);
trace("yd2:"+yd2);
trace("hypot:"+hypot);
trace(angle);

}

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Разве не

xd2 + yd2 - гипотет * гипотет

всегда будет нулевым, следовательно, acos (0) равно 90.

Cos - это смежный / гипотенузаИтак, предположим, что вы вычисляете градиент линии между двумя объектами,

acos (xdiff / hypot)

, затем конвертируйте из радиан с помощью 180 / pi.

1 голос
/ 16 февраля 2012

Что это значит для вас угол между двумя объектами ?

Угол может быть рассчитан между двумя линиями. Вы рассчитываете угол между стороной x и стороной y прямоугольного треугольника, и это всегда 90 градусов.

...