Добрый вечер.
Как можно добиться имитации линии в трехмерном пространстве.
Т.е. что бы сначала линия была более широкой, а чем дальше, тем тоньше.
В голову пришла идея написать уравнение прямой при помощи 2 точек(начало и конец линии), получить координаты всех точек в промежутке от y1 до y2, и отрисовать круг в полученных точках, уменьшая радиус на определённое число.
Umid: Тогда окружностями нельзя. Огромное количество точек получается. На пересчет уйдет много ресурсов. Как и ответил Виталий Столяров- многоугольник проще. По количеству точек выигрыш очевиден.
Umid: WebGL использует ресурсы видеокарты, context 2d использует процессор. Так что WebGL будет намного быстрее. Особенно если у вас анимация планируется. Ну и заюзать готовый three.js будет сильно проще, чем писать, по сути, свой 3d-движок.
Конечно статью по ссылке всё равно прочитать рекомендую, для понимания того как в принципе такие движки устроены.
Umid: Точки О и О1 есть.
От точки О находим А через sin и cos (угол и радиус тоже ведь есть).
Точка B- это А с противоположенными знаками.
С точками А1 и В1 то-же самое (если, конечно, эти координаты не считаются от А и В)
Umid: Углы рассчитываются не руками. Если у нас есть две точки на плоскости, то мы можем найти длину вектора, угол между вектором и осью (или другим вектором).
Тогда для поворота объекта (множество точек) умножаем координаты на матрицу поворота (указывая полученный ранее угол).
Для масштабирования или перемещения так-же используем нужную матрицу.
Для анимации нужна длинна вектора, которую поделив на скорость- получим время анимации. Вычислив разницу между старой позицией и новой (для каждой оси) получаем на сколько нужно изменить X и Y за полученное время.