Геометрическая функция, азимут по координаторам
Здравствуйте.
Вот написал функцию и тестирую 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:вниз |
|
Цитата:
|
Не помогло, пожалуйста дайте мне формулу
Перешел по силке и нечего там не понял:( не могли бы дать мне формулу, я ее там не увидел,
|
ryslan-yc,
Malleys он лучше понимает вашу тригонометрию ... |
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} находится второй вектор) |
Цитата:
|
Часовой пояс GMT +3, время: 11:31. |