Как отобразить полные 360 градусов с помощью Actionscript 2 и тригонометрии?

Я создаю игру, которая использует тригонометрию для расчета и отображения расстояния и градусов в динамических текстовых полях. Я рассчитываю расстояние моего курсора от центра клипа. И, используя этот центр видеоклипа, я пытаюсь рассчитать и отобразить полные 360º, когда мой курсор перемещается по swf. У меня работает дистанционная часть игры, но часть, отображающая градусы, работает неправильно. Динамическое текстовое поле отображается только от 90° до 270°. Вместо перехода от 270º к 360º/от 0º к 90º он просто отсчитывает от 270º до 90º. Ниже мой actionscript. Буду очень признателен за любую помощь или предложения. Спасибо!

//Mouse and Dynamic Text Boxes-------------------------

Mouse.hide();

onMouseMove = function () {
feedback.text = "You are moving your mouse";
cursor._x = _xmouse;
cursor._y = _ymouse;
updateAfterEvent();
xmouse_value.text = Math.atan2((a), (b));
ymouse_value.text = Math.round(radians*180/Math.PI)
updateAfterEvent();  
};

Mouse.addListener(myListener);


//distance (RANGE)
_root.onEnterFrame = function () {
xmid = Stage.width/2;
ymid = Stage.height/2;

a = _root._ymouse-ymid;
b = _root._xmouse-xmid;
c = Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2));
feedbacka.text = Math.round(a);
feedbackb.text = Math.round(b);
feedbackc.text = Math.round(c/30.4);

updateAfterEvent();  

var radians:Number;
var degrees:Number;

//Calculcate Radians
//Radians specify an angle by measuring the length around the path of the circle.
radians = Math.atan2((c), (b))

//calculate degrees
//the angle the circle is in relation to the center point
//update text box inside circle
radians_txt = Math.round(radians*360/Math.PI);
degrees_txt = Math.round(radians*180/Math.PI);

updateAfterEvent();  

//getting past 270 degrees

radians2_txt = Math.round(radians/Math.PI);
radians2_txt = Math.floor(radians + -270);

}

person devinbyrnes    schedule 04.04.2012    source источник


Ответы (1)


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

radians = Math.atan2(a, b);

Следующая проблема состоит в том, чтобы преобразовать радианы в градусы. Чтобы преобразовать радианы в градусы, вы можете сделать это:

degrees_txt = radians * 180 / Math.PI;

Обратите внимание, что atan2 возвращается от -Math.PI / 2 до Math.PI / 2. При преобразовании в градусы этот диапазон становится от -180 до 180. Чтобы преобразовать от 0 до 360, вы можете добавить 360 к результату, если он отрицательный:

if(degrees_txt < 0) degrees_txt += 360;
person Mike Welsh    schedule 05.04.2012