Каков наилучший способ получить коэффициент для 2d нормального распределения по 2d массиву со средним значением в середине и минимумом в углах? - PullRequest
0 голосов
/ 10 января 2019

В настоящее время я работаю над проектом (Unity, C #), в котором мне нужно воспроизвести искажения объектива камеры.

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

Чтобы применить искажение, мне понадобится 2-мерный мультипликативный коэффициент с гауссовым распределением, который будет применен к этому массиву, с максимумом (1) в средних точках и минимумом (что-то <1) в 4 углах. Я придумал этот код на данный момент </p>

QualityOfView(projectedRays[p1, p2]) * DeformCameraLens(p1, p2, projectedRays);

С

private float DeformCameraLens(int index1, int index2, Vector3[,] projectedRaysArray)
{
    int max1 = projectedRaysArray.GetLength(0);
    int max2 = projectedRaysArray.GetLength(1);

    float percentPerIndexPoint1 = (1 - maxQOVPercentDeformation) / (max1 / 2f);
    float percentPerIndexPoint2 = (1 - maxQOVPercentDeformation) / (max2 / 2f);

    float percent1 = 1 - percentPerIndexPoint1 * Mathf.Abs(index1 - (max1) / 2f);
    float percent2 = 1 - percentPerIndexPoint2 * Mathf.Abs(index2 - (max2) / 2f);

    return (percent1 + percent2) / 2f;

Что, очевидно, является заполнителем и является просто конусом (я думаю, верно?) С вершиной в середине моего массива.

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

Как должен быть реализован DeformCameraLens?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...