LINUX.ORG.RU

функция градиента

 


0

1

Здравствуйте.

Мне необходимо выделить точки радиальным градиентом http://i.imgur.com/HCQzlWr.jpg (от центра)

http://i.imgur.com/wOzFzVZ.jpg

Мне дана возможность ввода функции, но я сам не могу ее написать.

Помогите, пожалуйста.

Запиши уравнение сферы, для начала.

А по какому принципу точки выделяются градиентом? Те, что попадают в серую облать (127) - выделяются? А те, что в светлосерые (например, 127..160, 160..192)?

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

Короче, укажи порог на градиенте, после которого точки не должны выделяться. Для своего радиального градиента (они разные бывают, кстати) прикинь радиус, который бы описывал этот порог. Используй этот радиус в уравнении сферы. Профит!

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

спасибо,
я выделил несколько точек в центре,
программа позволяет на основе моего выделения выделить еще точек,
я смог выделить линейно (y>0)
а мне хочется градиентом и во все стороны (по x/y радиально)
помогите составить функцию

brothermechanic ★★★★★
() автор топика
Ответ на: комментарий от brothermechanic

Ох.. вними моим предыдущим комментариям.

x*x + y*y + z*z < R*R,

R - константа, подставляешь нужное тебе значение.

yoghurt ★★★★★
()
Ответ на: работает! от brothermechanic

А как должен работать градиент?

Судя по всему, у тебя выделение бинарное. Т.е. либо точка выделена, либо нет. Не уверен, что Meshlab поддерживает промежуточные «немного выделена» и «немного не выделена», которые ты, возможно, ожидаешь от «градиентного» выделения.

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

«немного не выделена»

нет, я про выборочное выделение, т.е. плотность точек постепенно падает.

Видимо, meshlab этой возможностью не обладает.

Спасибо за помощь.

brothermechanic ★★★★★
() автор топика
Последнее исправление: brothermechanic (всего исправлений: 1)
Ответ на: «немного не выделена» от brothermechanic

Продолжая попытки осознать требуемое

выборочное выделение

плотность точек

Вероятность выбора точки уменьшается с удалением от центра, чтоли?

yoghurt ★★★★★
()
Ответ на: комментарий от brothermechanic

Я как дно в математике просто брал бы случайную величину, домножал бы её на величину, обратную расстоянию от данной точки до центра, и масштабировал бы её в некий диапазон. Если получившееся значение больше/меньше определённого порога в данном диапазоне, выделяем точку (возвращаем true).

Но боюсь что тот калькулятор, что в Мешлабе используется, такое не позволит :)

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

видимо так и есть,

надо им писать чтоб делали инструмент

brothermechanic ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

Можно попробовать вместо случайной величины взять какой-нибудь хэш от координат. Мне кажется, вполне можно в однострочник упихать, если исхитриться.

xeiph
()
Ответ на: комментарий от brothermechanic

Вроде бы h(x, y, z) / (x*x + y*y + z*z) > param, где h — функция, принимающая значения от 0 до 1 достаточно «случайным» образом.

Вот, например, для 2D http://www.wolframalpha.com/input/?i=plot ((floor((y^3*x^3%29+*+1000%29+mod+100%29+%2F+100%29+%2F+%28x^2+%2B+y^2%29+%3E+0.00002+from+-200%2C+-200+to+200%2C+200
Выглядит лохмато, потому что функция h достаточно простая, но немного похоже на http://i.imgur.com/HCQzlWr.jpg.

xeiph
()
Ответ на: комментарий от xeiph

Хотя на самом деле скорее h(x, y, z) / sqrt(x*x + y*y + z*z) > param , а то градиент получается нелинейный от радиуса.
Вольфрам отказывается такое считать, ссылаясь на «Standard computation time exceeded...».

xeiph
()
Ответ на: не выходит от brothermechanic

Я же не знаю, какой там синтаксис, это был пример для wolfram, чтобы просто показать, как будет выглядеть. Но надо написать только ту часть, которая h(x, y, z) / (x*x + y*y + z*z) > param
Не знаю, есть ли там функция floor (может быть round или int или ещё как-нибудь) и остаток от деления (mod, может быть там он %), если нет, тогда надо либо что-то хитрей, либо ничего не получится.

xeiph
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.