@antpv

Как на JS узнать deg курсора относительно какой-то условной точки?

Чтобы не писать много текста, сделал иллюстрацию
5b632727817e3770982739.png

С геометрией дружу не очень, буду рад за подсказки либо формулы, которые с помощью позиций X && Y курсора и target могут дать deg :)
  • Вопрос задан
  • 272 просмотра
Решения вопроса 2
Stalker_RED
@Stalker_RED
deg в смысле угол? Угол измеряется между двумя прямыми, а не двумя точками. Нужно как минимум три точки.
oBPKzx.png
let rad = Math.atan2(P3.y - P1.y, P3.x - P1.x) -
            Math.atan2(P2.y - P1.y, P2.x - P1.x)
            
	display.value = rad * (180 / Math.PI)

jsfiddle.net/72cLse6z
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Вот накидал пример:
https://codepen.io/bingo347/pen/XBqzwY
думаю сможете доработать под себя

Если что, вот теория:
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D1%8F%D...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Ridz
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <style type="text/css">
  body {
      position: relative;
  }

  .target  {
  position: absolute;
  top: 190px; left: 190px;
  width: 60px; height: 60px;
  border-radius: 50%;
  background-color: red;
  text-align: center;
  line-height: 60px;
  color: #FFFFFF;
  }

  .line {
  position: absolute;
  top: 220px;
  left: 220px;
  width: 100px;
  height: 4px;
  background-color: red;
  transform-origin: 0;
  }

  </style>
  <script>
  document.addEventListener('DOMContentLoaded', function() {
    const target = document.querySelector('.target');
    const line = document.querySelector('.line');
    const pos = {left : 190, top : 190, width : 60, height : 60};
    const lft = pos.left + pos.width / 2;
    const tp = pos.top + pos.height / 2;
    document.addEventListener('mousemove',
    function(event) {
               let x = event.pageX - lft - 8;
               let y = event.pageY - tp - 8;
               let r = Math.sqrt(x * x + y * y);
               let deg = 180 / Math.PI * Math.atan2(y, x);
               if(deg < 0) deg += 360;
               target.innerHTML = (deg|0) + ' deg'
               line.style.transform = "rotate(" + deg + "deg)";
               line.style.width = r + 'px'

    })
  });
  </script>
</head>
<body>
  <div class="line"></div>
  <div class="target"></div>
</body>
</html>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы