Задать вопрос
Destell
@Destell
React, React Native junior developer

В чем может быть причина странного поведения отрезка на оси координат?

Код

Инвертировал значения top, сделав правую сторону окна аналогом OY (возможно, умнее было бы использовать bottom).

Вычислил по формуле 646954558af0058e6517.31632316.PNG длину отрезка, где x1 y1 заданы top left позициями линии, x2 y2 - координаты курсора на экране.

По спертой с сайта-конвертера формуле высчитал угол между отрезком и OX, перевел в градусы

spoiler

getAngularCoefficient: function(x1, y1, x2, y2) {
            let r = y2 - y1,
                r1 = x2 - x1,
                res,
                angular;
            
            if (r == 0 && r1 == 0) {
               res = 0;
               
            } else if (r != 0 && r1 == 0) {
               res="Infinity";
               
            } else {
               let res1 = (+r) / (+r1);
               res = Math.round(1000 * res1) / 1000;
            };
            
            angular = _methods.getAngular(res);
            
            _methods.setLineDeg($LINE, angular);
         },



Дальше начался геморрой, на котором я завис, проще посмотреть на самом примере.
Единственный участок, на котором отрезок ведет себя нормально - сектор Х, -Y
В секторе X Y отрезок бьется в конвульсиях.
В остальных секторах все не намного лучше, но там хотя бы очевидна причина - инвертируется знак значения угла.
  • Вопрос задан
  • 43 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
AngReload
@AngReload
Кратко о себе
Я так понял, что вы пытаетесь получить координаты точки в которой начинается линия, с помощью этого кода:
let coords = {
                  x1: line.offset().left,
                  y1: Math.abs(line.offset().top - wHeight)
               };

Если вы добавите после этих строк console.log(coords) то увидите в консоли разработчика цифры меняющиеся от положения курсора. А ведь начало линии не изменяется, значит тут ошибка.

Я заменил ваш код на такой:
let coords = {
                  x1: 10,
                  y1: wHeight / 2
               };

И похоже, у вас ещё есть ошибка где-то в определении направления угла.
Ответ написан
Комментировать
gbg
@gbg
Любые ответы на любые вопросы
Для этой задачи не нужны трюки с углами. Исходные данные -
Xm Ym - координаты мыши
Xc Yc - координаты "центра" - откуда растет линия

находим направление от центра до курсора N={Xm-Xc;Ym-Yc}

теперь делаем вектор единичной длины {Xv, Yv} = {Xm-Xc;Ym-Yc} /sqrt( (Xm-Xc)^2 + (Ym-Yc)^2 )

теперь "удлиняем" наш вектор до нужной нам длины {Xr,Yr}={Xv*L;Yv*L}

Ну и рисуем Line(Xc, Yc, Xc+Xr,Yc+Yr)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы