Окружающий ограничивающий прямоугольник экспоненциального затухания - PullRequest
0 голосов
/ 07 марта 2011

Я действительно не знал, как сформулировать этот вопрос, это довольно странно.

У меня есть 1d массив значений интенсивности и ограничивающий прямоугольник (целая начальная и конечная точка в массиве).Я хочу сохранить значения внутри ограничивающего прямоугольника одинаковыми, но уменьшать значения вне прямоугольника экспоненциальным образом (т.е. чем дальше они, тем больше они уменьшаются).Должно выглядеть как гауссиан с плато, где находится ограничительная рамка.Кто-нибудь может привести пример того, как я мог это сделать?Мой мозг не работает сегодня вечером, спасибо.

ОБНОВЛЕНИЕ:

Я использовал это:

if (j < low) a[j] *= Logistic(t*(j + (6f/t) - low));
else if (j > high) a[j] *= Logistic(-t*(j - (6f/t) - high));

private double Logistic(double x)
{
    return (1 / (1 + Math.Exp(-x)));
}

Ответы [ 3 ]

1 голос
/ 07 марта 2011

Что-то вроде

if (n<low)
  a[n] *=  exp(-t*(low-n));
else if (n>high)
  a[n] *=  exp(-t*(n-high));
else 
  a[n] *=  1.0;

с параметром t? Действительно, последняя ветвь else может быть опущена.

1 голос
/ 07 марта 2011

Вы спрашиваете, как уменьшить в геометрической прогрессии, приблизиться к 0 произвольно?инверсия экспоненты?

value = ln(distance)

Если вы хотите что-то похожее на это (сначала увеличивается быстро, медленно по мере продвижения), то есть ограничено , смотрите1012 * этот ответ на сигмовидных кривых.

0 голосов
/ 07 марта 2011

Вы хотите отрубить горб Гаусса, по сути?

Гауссиан это что-то вроде I = I_0 exp(-aX^2). У вас есть I на X на половине ширины вашей ограничительной рамки. Затем вы можете играть с I_0 и a, пока не получите то, что хотите (выберите I_0, чтобы получить соответствующий a или наоборот).

(Кроме того, X смещен в центр вашей ограничительной рамки. Приведенная выше формула работает для X = 0.)

...