Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Геометрическая функция, азимут по координаторам (https://javascript.ru/forum/misc/66568-geometricheskaya-funkciya-azimut-po-koordinatoram.html)

ryslan-yc 23.12.2016 21:53

Геометрическая функция, азимут по координаторам
 
Здравствуйте.
Вот написал функцию и тестирую
this.turn = function(obj1,obj2){
        var x = obj2.X() - obj1.X(),y = obj2.Y() - obj1.Y();
        var x_bool = (x > 0)?true:false,y_bool = (y > 0)?true:false;//больше нуля?
        x = x_bool?x:-x;y = y_bool?y:-y;

        var incline = (90/100)*(x/((x+y)/100));//это вычисление, важно только это
        return incline;
    };


Функция принимает в качестве 1 аргумента объект, нужно найти наклон от объекта 1 к объекту 2 (второй аргумент), точнее нужно узнать как нужно повернуться чтобы объект 1 "смотрел" на объект 2, и вернуть наклон.
Моя функция имеет погрешность которая небольшая и плавает в зависимости от наклона и аргументов XY, что есть недопустимо:nono: в геометрической задаче:-/ .
У объектов которые будут переданы в качестве аргументов имеют гетеры obj.X() obj.Y() которые возвращают положение по X,Y соответственно.
Мой метод по идее на этот момент работает только с +x,+y,чтобы организовать и работу и с -x,-y методу нужно будет просто их менять на +x,+y запоминать какая ось будет "-"(минусовая) и потом поправлять ответ, например если
-x,+y то incline -90
+x,-y incline +90
-x,-y incline -180
Есть одно но, наклон у меня не по геометрическим правилам а по моим:lol:
У меня 0:верх 90:вправо -90:влево +-180:вниз

рони 23.12.2016 21:58

ryslan-yc,
http://javascript.ru/forum/misc/6102...tml#post405988

рони 23.12.2016 22:20

Цитата:

Сообщение от ryslan-yc
чтобы объект 1 "смотрел" на объект 2

:) поворот изображения в сторону курсора

ryslan-yc 24.12.2016 09:06

Не помогло, пожалуйста дайте мне формулу
 
Перешел по силке и нечего там не понял:( не могли бы дать мне формулу, я ее там не увидел,

рони 24.12.2016 10:30

ryslan-yc,
Malleys он лучше понимает вашу тригонометрию ...

Malleys 24.12.2016 18:40

this.turn = function(obj1, obj2){
    var dx = obj2.X() - obj1.X(), dy = obj2.Y() - obj1.Y();
    var p = Math.abs(dx) / dx; isNaN(p) && (p = 1);

    return 180 * p * Math.acos(dy / Math.sqrt(dx * dx + dy * dy)) / Math.PI;
};


У вас, как я понял один вектор всегда {0; 1}, а второй имеет начало в obj1, а конец в obj2. Значит задача сводится к поиску угла между двумя этими векторами. (И ещё поправка в какую сторону от {0; 1} находится второй вектор)

Malleys 24.12.2016 18:47

Цитата:

Сообщение от ryslan-yc (Сообщение 438804)
Есть одно но, наклон у меня не по геометрическим правилам а по моим:lol:

По геодезическим... это азимут. Эта зараза мерила азимуты не от 0 до 360, как все нормальные люди, а от -180 до +180!!!


Часовой пояс GMT +3, время: 11:31.