@AnswerSearcher

Как найти равноудалённые точки на кривой Безье, или эллипсе?

Возникла необходимость сабжа, бьюсь второй день, не спиться даже.

Ребята, я честно обыскивался интернетом, не буду спорить что нашёл некоторые решения (stackoverflow.com/questions/10477/equidistant-poin... , mathoverflow.net/questions/28070/finding-n-points-... но с моими дошкольными познаниями о геометрии эффективность данных ответов сводится к нулю, и позволяет только данные объекты на экран вывести.

Да, я знаю, геометрию нужно знать если задаёшься такими вопросами, но сейчас у меня не слишком много времени на это, но я обязательно буду посвящать этому время при изучении материалов.

P.S. Пишу скрипт на яваскрипт, честно — необходимо разместить картинки на эллипсе равноудалённо, но если это слишком ресурсозатратно подойдут и кривые.

P.P.S. Если кому необходимо визуализировать суть проблемы и во что у меня не получается - www.saccade.com/writing/graphics/RE-PARAM.PDF на второй странице наглядная демонстрация (только не на эллипсе или кривой).
  • Вопрос задан
  • 3173 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега Программирование
Любые ответы на любые вопросы
Правильный ответ нашелся на stackoverflow

Фактически, тамошний автор использовал вариант с параметрическим уравнением эллипса:
ellipse.svg?dl=0
Но каждый шаг параметра альфа у него не константа, а определяется по формуле:
ellipse-da.svg?dl=0
Для вычисления длины эллипса L можно применять формулу Рамануджана:
ramanujhan.svg?dl=0
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А что значит "равноудалённо"? Равное декартово расстояние между точками или равная длина дуги кривой?
Для эллипса задача аналитически не решается, поскольку решение содержит эллиптический интеграл, не берущийся в общем виде.
Можно преобразовать эллипс в набор точек по Брезенхему, сохраняя кроме координат расстояние до предыдущей точки (сдвиг только по X или Y даёт 1, одновременный сдвиг даёт sqrt(2)) и просуммировать расстояния, получив длину приближённой линии. Затем делим эту длину на нужное количество частей, получая шаг по дуге и от стартовой точки суммируем расстояния до получения нужного шага.
Ответ написан
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
С эллипсом кажется довольно просто - расставить на окружности, потом сплюснуть.
Сплющивание просто сделать можно так
X_эллипса=X_окр
Y_эллипса=Y_окр*a/b
где a, b полуоси эллипса
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы