Мне известно множество статей по этой теме c на Inte rnet, но мне не удалось решить мою проблему. Я думаю, что мои тригонометрические вычисления верны, но, возможно, я что-то напутал в JavaScript.
Моя цель - вычислить точку на окружности (x, y), чтобы я мог переместить мои sliderHead
в эта позиция. Для этого мне нужно вычислить угол между точками нажатия и щелчком на моем круге - для этого я использую atan2
. Далее я использую простую тригонометрию для вычисления фактических значений X и Y:
let y = -Math.ceil(radius * Math.cos(deg));
let x = Math.ceil(radius * Math.sin(deg));
Я понимаю, что мне нужно инвертировать cosine
и sine
, потому что моя начальная позиция на самом деле на 90 градусов, а не 0 и я включаю CLOCKWISE, а не COUNTERCLOCKWISE, что предполагает математика.
Начальные значения равны 0, поскольку начальное значение sliderHead
находится в центре круга. Начальное значение не является действительным 0, 0px, но является центром родительского элемента div .
Как вы увидите на картинке ниже, я не делаю это правильно, слайдерHead находится за решеткой.
Вот код, где я вычисляю точку x, y:
testCalc(event) {
let deg = Math.atan2(event.pageY - this.centerY, event.pageX - this.centerX);
console.log(deg);
let radius = this.options.radius;
let y = -Math.ceil(radius * Math.cos(deg));
let x = Math.ceil(radius * Math.sin(deg));
return {
"x": x + "px",
"y": y + "px"
};
}
А вот расположение элемента sliderHead внутри моего HTML:
Вот как я перевожу sliderHead
:
moveSliderHeadPosition(point) {
this.sliderHead.style.transform = "translate(" + point["x"] + "," + point["y"] + ")";
}
Как уже говорилось, я исчерпал все свои варианты, пытаясь решить эту проблему.