Как преобразовать точку в полярные координаты в ECMAScript? - PullRequest
1 голос
/ 08 июля 2011

Мне нужно превратить место щелчка в полярную координату. Это мой текущий алгоритм. Местоположение - это местоположение на холсте клика ({x:evt.clientX, y:evt.clientY}), центр - это смещение начала координат от 0,0. Например, если круг центрирован на 250, 250, центр равен {x:250, y:250}. Шкала - это шкала радиуса. Например, если радиус окружности от центра обычно равен 50, а масштаб равен 0,5, радиус становится равным 25. (это для увеличения / уменьшения)

this.getPolarLocation = function(location){
    var unscaledFromCenter = {
        x: location.x - center.x,
        y: location.y - center.y
    };
    var angle = this.getAngleOnCircle(unscaledFromCenter);
    var dist = Math.sqrt(unscaledFromCenter.x * unscaledFromCenter.x + unscaledFromCenter.y * unscaledFromCenter.y) * this.ds.scale;
    return {
        angle:angle,
        dist:dist,
        toString: function(){
            return "Theta: ".concat(angle).concat("; dist: ").concat(dist);
        }
    };
}

this.getAngleOnCircle = function(location){
    var x = location.x;
    var y = location.y;
    if(x == 0 && y > 0)
        return Math.PI / 2;
    if(x == 0 && y < 0)
        return 3 * Math.PI / 2;
    if(y == 0 && x > 0)
        return 0;
    if(y == 0 && x < 0)
        return Math.PI;
    var angle = Math.atan(y/x);
    if(x > 0 && y > 0)
        return angle;
    if(x < 0)
        return Math.PI + angle
    return Math.PI * 2 + angle;
}

Скриншоты вопроса. Слева - то, что происходит в уменьшенном масштабе (и не должно происходить). Право увеличено (scale> = 1), и это то, что должно произойти. Glitch

У меня такое впечатление, что мои координаты центра немного смещены. Кажется, что это нормально работает для масштаба> = 1, но не для масштаба <1 </p>

Источник: circos.html: http://pastie.org/private/cowsjz7mcihy8wtv4u4ag circos.js: http://pastie.org/private/o9w3dwccmimalez9fropa datasource.js: http://pastie.org/private/iko9bqq8eztbfh8xpvnoaw Запустите в Firefox

Итак, мой вопрос: почему это не работает?

1 Ответ

0 голосов
/ 08 июля 2011

По какой-то причине программа автоматически работает, когда я закрываю firebug.Кажется, он не работает на Firefox 5, только версия, которая у меня есть (где-то в 3-х).В любом случае, я проверяю проект для чего-то более объектно-ориентированного.Нет никакого способа, которым текущий алгоритм мог обработать геном.(это именно то, что я собираюсь отображать)

ОБНОВЛЕНИЕ:

Я выяснил проблему ... Я измерял расстояние от верхнего левого края страницы, а неверхний левый холст.Таким образом, когда был включен firebug, экран сместился, что усугубило проблемы.Решением является использование canvas.offsetLeft и canvas.offsetTop для вычисления положения на холсте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...