...ну, до неполного круга.
У меня есть перетаскиваемый ползунок, который выглядит так:
Синяя полоса имеет имя экземпляра track
, а розовая точка — имя экземпляра puck
.
Мне нужно, чтобы шайба всегда была ограничена синей зоной, и здесь мои математические ошибки работают против меня! Пока у меня шайба движется по оси x только так:
private function init():void
{
zeroPoint = track.x + (track.width/2);
puck.x = zeroPoint-(puck.width/2);
puck.buttonMode = true;
puck.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
}
private function onMouseDown(evt:MouseEvent):void
{
this.stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
this.stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
}
private function onMouseUp(evt:MouseEvent):void
{
this.stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
}
private function onMouseMove(evt:MouseEvent):void
{
puck.x = mouseX-(puck.width/2);
//need to plot puck.y using trig magic...
}
В настоящее время я думаю, что я могу использовать радиус неполного круга (50) и мышь X относительно вершины дуги для вычисления треугольника, а оттуда я могу вычислить требуемую позицию y. Проблема в том, что я читаю различные сайты по тригонометрии и до сих пор не знаю, с чего начать. Может ли кто-нибудь объяснить, что мне нужно делать, как если бы я разговаривал с ребенком, пожалуйста?
Редактировать: Тот факт, что круг разорван, не должен быть проблемой, я могу легко ограничить движение до определенного количества градусов в каждом направлении, это в первую очередь получение градусов, которые я могу не получить мою голову вокруг!
Edit2: я пытаюсь следовать ответу Bosworth99, и это функция, которую я придумал для вычисления радиана, чтобы поместить ее в его функцию:
private function getRadian():Number
{
var a:Number = mouseX - zeroPoint;
var b:Number = 50;
var c:Number = Math.sqrt((a^2)+(b^2));
return c;
}