![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
kuksha |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Есть массив точек, по которым надо построить фигуру (JavaScript+Canvas).
Просто многоугольник я построить конечно же могу - отдельными отрезками в цикле. Но нужно, чтобы углы полученого многоугольника были сглажены, закруглены. В общем нужно построить кривую по заданным точкам. Причём, кривая должна именно проходить через эти точки! То есть, кривые Безье вроде не очень-то подходят? Ведь там кривая идёт не касаясь их... наверное их как-то можно приспособить, меняя степень притяжения к точке, но я не понял как... Чем это можно сделать? Может библиотека какая готовая есть? Лезть в математику и изобретать велосипед совсем не хочется... Это сообщение отредактировал(а) kuksha - 5.11.2015, 13:35 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Что в итоге надо сделать? Что-то типа прямоугольника со скругленными краями?Кривая Безье проходит от точки - курсора до следующей точки-курсора.
Еще пара координат в функции задают касательные и "напряженность" самой линии. Если нужно просто у пересечения пары линий нарисовать "скругленный угол" - математики получается не особенно и много. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
kuksha |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Да, Вы правы, - надо было внятнее написать...
Нужно нарисовать Млечный Путь ![]() Не знаю пока насколько часто там опорные точки прописаны - на днях должны прислать файл с координатами... Если там точки будут даны очень часто, то может быть и простой многоугольник сойдёт (не особо красиво, но зато быстрее прорисовка). А если редко, то углы фигуры скруглять точно надо, причём скорее всего под разными радиусами с учётом взаимного расположения, то есть опять "велосипед" наподобие Безье получается, если самому писать... Безье я только смотрел, но каюсь - не пробовал... Насколько я вижу в примерах - там если невдалеке от двух точек есть третья, то эти две точки соединяются дугой, которая "на сколько-то" вытянута в сторону этой третьей точки - вот это "на сколько-то", а не "через третью точку" меня и смущает... Про параметры стандартной функции Безье - не вижу я их что-то в стандартном bezierCurveTo... Это сообщение отредактировал(а) kuksha - 5.11.2015, 17:36 |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Для выпуклых фигур, если велосипед, то можно сделать так (на пальцах). Через каждую точку проводим прямую, параллельную проходящей через двух соседей. Если провести прямые через каждую точку, получится, что на каждой грани многоугольника стоит треугольник. Вот этот треугольник и будет параметрами для квадратичной (quadraticCurveTo) кривой Безье. Первая пара - координаты последней точки рисования (moveTo(...)) - координаты вершины, стоящей на грани, первая реальная пара параметров - вершина треугольника, последняя - вершина стоящая на многоугольнике. Для невыпуклых фигур придется придумать что-то посложнее...
bezierCurveTo - то же самое, только следующего уровня, больше параметров. Математика не сильно сложная, но замороченная, если писать ее самому. В качестве совсем уж простого решения, можно бы обрисовать многоугольник толстой круглой кистью, а потом залить внутренность. Хотя я не пробовал так рисовать, это вообще реально? Добавлено через 14 минут и 22 секунды Реально. lineWidth и .lineJoin="round" -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
kuksha |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 15.6.2011 Репутация: нет Всего: нет |
Да, насчёт широкой кисти я тоже вчера подумал
![]() А кисть можно сделать более тёмного оттенка - тогда граница будет не такая резкая... Всё, пока спасибо ![]() |
|||
|
||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |