Параметрическая кривая

From
Anton Vdovichenko (2:5025/3.8)
To
Georgy Udov
Date
2002-12-01T23:36:57Z
Area
RU.ALGORITHMS
Hello Georgy.

01 Dec 30 16:22, Georgy Udov wrote to Anton Vdovichenko:


 GU> Спасибо большое за информацию. Только ещё несколько вопросов:
 GU> 1) Так как на каждом узловом интервале полиномы А(t) и B(t) разные, то
 GU> уравнение нужно решать для каждого интервала, а потом, если получим t,
 GU> выходящее за границы данного интервала, - это решение отсекать? Или
 GU> можно сначала как-нибудь прикинуть, на каком узловом интервале
 GU> находится заданная точка?

 Вообще то количество интервалов у подавляющего числа кривых, с которыми я работал - 1, 2. Но, конечно, встречаются кривые и с большим числом интервалов, например - спираль с 10 витками ( у нее интервалов >100), для нее у меня точки искались достаточно долго ( 900 точек за ~5 сек, на Duron 650 ). Для этого случая у меня была идея построить для кусков кривой из каждого интервала свой ограничивающий параллепипед и сначала проверять принадлежит ли точка ему, но о реальности реализации сказать ничего не могу - руки не дошли...

 AV>> Для третьей можно тоже аналитическое решение написать. А так, для
 AV>> общего случая, решается методом дихотомии, концы интервала ведь

 GU> По-моему, аналитически можно решить и для четвёртой степени. То есть,
 GU> дихотомия годится только до пятой. Дальше дифференцированное уравнение
 GU> станет решать сложно - надо будет и его дифференцировать... Конечно,
 GU> можно написать рекурсивную функцию, решающую уравнение дихотомией,
 GU> только тогда возникнет другой вопрос - а не будет ли это менее
 GU> эффективно, чем какой-нибудь итерационный метод...

 Насколько я знаю, реально используются только кубические сплайны, да и то, случаи когда степень равна 3 достаточно редки, в основном 2-я. По крайней мере это верно для той геометрии которая импортируется из большинства CAD систем (в основном работал с геометрией из SolidWorks ). Но в принципе у меня есть опыт и по решению уравнений большей степени. Например когда ищешь расстояние от точки до кривой, то там степень вырастала до 9. Я реализовывал именно рекурсивный алгоритм - работает достаточно шустро.
  В принципе можно приблизительно оценить затраты дихотомии и прямого поиска для степени k: если длина интервала d, а шаг с которым ты будешь искать e, то при прямом поиске число вычислений функции будет n=d/e, а для дихотомии < (k^2)*log2(n). Т.ч. выбирай сам :) Возможно есть какой-нибудь лучший метод, но я его не знаю. Для меня, при реализации решающим фактором было то, что дихотомия гарантированно находит все корни с заданой точностью.


Anton

--- GoldED 2.50+
 * Origin: ... (2:5025/3.8)