В этом скрипте вы можете увидеть мою реализацию.
Он в основном работает как измененный, но есть некоторые пятна, где угол изменяется резко и не гладко. Играйте с помощью мыши и узнайте. (Когда X-Position мыши находится вокруг X-позиции исчезающей линии). Также я не понимаю, почему исчезающая линия не следует за мышью дальше 45 °.
lineRad = Math.asin(Math.sin(vertDist / mouseLineDist));
lineRad = (mouseX - lineX) >= 0 ? lineRad : -lineRad + Math.PI;
lineRad = (mouseY - lineY) >= 0 ? lineRad : -lineRad;
Это может быть причиной прыжков, но я не уверен.
Я просто проверил это под Firefox. Похоже, что у него серьезные проблемы с производительностью. Итак, этот прототип работает в Chrome. Любые предложения по производительности и совместимости с браузером также приветствуются.
Вам не хватает функции atan2, она идеально решает вашу проблему в одной строке:
horDist = (mouseX - lineX);
vertDist = (mouseY - lineY);
lineRad = Math.atan2(vertDist, horDist);
Кроме того, вероятно, вы получите лучшее исполнение, определяющее происхождение трансформирования как апрофессию, вместо установки дополнительного перевода