Как я могу распределить точки по неявной поверхности, чтобы сконцентрировать их более плотно в областях более высокой кривизны?
Я рассмотрел случайное добавление точек и отклонение точек, которые не требуются, исходя из кривизны, но я хотел бы знать, существует ли лучший подход, обеспечивающий более равномерное распределение по областям аналогичной кривизны, в то же время давая более высокую плотность, требуемую в области кривизны.
Я специально использую эти точки для триангуляции поверхности и не хочу создавать больше треугольников, чем нужно для относительно плоских деталей.
Это будет применяться к фигурам с известной производной, чтобы можно было рассчитать кривизну в данной точке.
Это не должен быть подход в реальном времени.
algorithm
triangulation
Trichoplax
источник
источник
Ответы:
Идея, которую я бы попытался применить, заключается в следующем: я делаю пример для кривой, но она должна быть простой для применения для поверхности.
Допустим, у нас есть кривая равномерно параметризованная. Допустим, параметр кривой . Ваша цель - выбрать точку, соответствующую значению , чтобы кривизна была высокой.s sγ s s
Если вы получите величину кривизны , это тоже будет функцией . Итак, если вы нормализуете функцию, вы получите распределение вероятностей. Если вы получите интеграл от такого распределения, у вас будет накопительное распределение. Назовем эту накопительную функцию .с | с | C ( s )c s |c| C(s)
Проблема выборки из распределения, заданного кумулятивной функцией, хорошо известна, поэтому, как после того, как вы выбрали набор значений , такое значение будет связано с интересующими точками.s0,s1,…,sn
Применение этого метода к случаю поверхности должно быть прямым, поскольку в основном у вас есть двумерная кумулятивная функция распределения, но проблема выборки точно такая же.
Просто, чтобы дать некоторые подробности, это в основном выборка из распределения, учитывая, что накопительная функция включает в себя два этапа:
принять случайное значение в интервале , скажем,к[0,1] k
решить уравнение .C(s)=k
Этот подход точный, конечно, он дорогой, но если вам нравится такой подход, вы можете работать над оптимизацией.
источник
Хорошей отправной точкой является классическая статья « Использование частиц для выборки и контроля неявных поверхностей» , опубликованная в SIGGRAPH 1994.
Простое моделирование частиц, описанное в статье « Выборка неявных объектов с помощью физических систем частиц» ( Computers & Graphics , 1996) для кривых, работает и для поверхностей; см. Динамическую текстуру для неявных поверхностей для примеров.
Более свежий пример см. В разделе Отображение формы и тона для неявных поверхностей ( Computers & Graphics , 2011).
источник
Следующий наивный подход, вероятно, не даст столь же хорошо распределенных точек, как те, которые дает Lhf , но он должен быть намного проще в реализации и в вычислительном отношении быстрее:
Для двух точек и обозначим через среднее расстояние, на которое вы хотите, чтобы точки со средней кривизной и имели, например, некоторую постоянную, умноженную на обратную величину средней кривизны и .у д ( х , у ) х у х уx y d(x,y) x y x y
Теперь соберите свою коллекцию точек последовательно:A
Выберите случайную точку и добавьте две точки, так что все три точки образуют равносторонний треугольник с длиной ребра .д ( х , х )x d(x,x)
Добавьте все точки к и отметьте их как соседние.A
Повторно делайте следующее, пока в больше не будет смежности :A
Проверьте, находится ли ближе, чем к любой точке из которая все еще смежна с другой точкой.d ( x , y ) Az d(x,y) A
В конце должен быть набор точек, соответствующих вашим критериям. Вы только что создали триангуляцию, но она может быть патологической, и поэтому вам, вероятно, следует заново триангулировать точки.A
источник