Войти
ПрограммированиеФорумОбщее

Как "инвертировать" значения весов?

Страницы: 1 2 Следующая »
#0
4:30, 28 сен 2021

Вроде простая задача, но что-то не дается.

Постараюсь вменяемо объяснить что мне нужно.
Вот есть у меня три значения, которые показывают "вес" без разницы чего (например, вес текстур террайна при смешивании):
0.1, 0.4, 0.5

0.1 + 0.4 + 0.5 = 1.0

или можно представить так: 10% + 40% + 50% =  100%

Мне нужно как-то инвертировать эти значения.
То есть 0.1 должно превратится в 0.9. (10% -> 90%)
А 0.5 (половина) так и должно остаться 0.5 (50% -> 50%).
0.9 + 0.5 > 1.0, фигня получается.

Или по другому:
0.5 остается 0.5 (третье значение) в любом случае же?
Тогда что делать, поменять местами первое и второе значение (0.1 и 0.4)?
Но это тоже выглядит неправильно.

Я запутался.

#1
5:13, 28 сен 2021

MikeNew
> 0.9 + 0.5 > 1.0, фигня получается.
Так подели на их сумму.

#2
5:15, 28 сен 2021

MikeNew
> Я запутался.
Изначальная задача неправильная. Инвертировать проценты бессмысленно.

#3
5:30, 28 сен 2021

samrrr
> Так подели на их сумму.
Пытался, не то получается.
samrrr
> Изначальная задача неправильная. Инвертировать проценты бессмысленно.
Похоже на то.

#4
8:34, 28 сен 2021

Скорее, бессмысленно инвертировать не проценты, а вообще сами значения весов. С какой целью это делается? Нужен пример задачи. Какой смысл инвертировать веса текстур при текстурировании ландшафта?

#5
8:46, 28 сен 2021

Инвертировать проценты вполне можно и интуитивно понятно если исходов событий две штуки. Ну просто инверсия и инверсия вместо 10/90 получаем 90/10 и никаких вопросов.
Но если исходов больше двух, то (1-Xi)/sum(X) хреново не только отсутствием "интуитивных" результатов, но еще и тем, что будучи применённой два раза не возвращается к начальным процентам, т.е. инверсией конечно и не пахнет.
Интересно возможна ли вообще функция тут которая дважды применённой сама себя отменит сохраняя хоть какую то видимость смены редких шансов на частые и наоборот.

#6
9:09, 28 сен 2021

=A=L=X=
> Интересно возможна ли вообще функция тут которая дважды применённой сама себя
> отменит сохраняя хоть какую то видимость смены редких шансов на частые и
> наоборот.

  a = 0.1
  b = 0.4
  c = 0.5
  
  w = 1 / (1 / a + 1 / b + 1 / c)
  a = w / a
  b = w / b
  c = w / c

Сумма по-прежнему =1, повторное применение восстанавливает исходные значения, редкие шансы меняются на частые и наоборот.

#7
9:39, 28 сен 2021

Mikle
> a = 0.1
> b = 0.4
> c = 0.5
>
> w = 1 / (1 / a + 1 / b + 1 / c)
> a = w / a
> b = w / b
> c = w / c

Изображение

И ведь для двух исходов точно обмениваем им веса, как и ожидается для них!
Похоже это искомая формула!

#8
10:01, 28 сен 2021

Mikle
> Скорее, бессмысленно инвертировать не проценты, а вообще сами значения весов. С
> какой целью это делается? Нужен пример задачи. Какой смысл инвертировать веса
> текстур при текстурировании ландшафта?
Я считаю смешивание для трех соседних ячеек Вороного.
l1, l2, l3 - расстояние от пикселя до центров ячеек.
Соответственно, веса для смешивания можно считать так:

sum = l1+l2+l3;
w1 = l1/sum;
w2 = l2/sum;
w3 = l3/sum;

Только это "обратные" веса получаются:
Изображение
поэтому я и хотел их "инвертировать", думал прокатит.

Задача, вроде, несложная, думал сам сделать, да вот что-то застрял.

#9
10:18, 28 сен 2021

MikeNew
> Задача, вроде, несложная, думал сам сделать, да вот что-то застрял.
Substance designer

#10
10:27, 28 сен 2021

MikeNew
То, что я дал, тоже не подходит?

#11
10:57, 28 сен 2021

Отнять их от единицы?

new_a = 1.0 - old_a;
new_b = 1.0 - old_b;
new_c = 1.0 - old_c;
#12
11:26, 28 сен 2021

Mikle
> То, что я дал, тоже не подходит?
Вроде подходит, допиливаю.

#13
11:29, 28 сен 2021

nes
> Отнять их от единицы?
Тему не читай — сразу отвечай.

#14
11:33, 28 сен 2021

MikeNew
> sum = l1+l2+l3;
> w1 = l1/sum;
> w2 = l2/sum;
> w3 = l3/sum;
>
> Только это "обратные" веса получаются:

Это задача интерполяции вершин внутри треугольника классически решается с помощью барицентрических координат.
В векторном виде вершину внутри треугольника можно представить как сумму трёх вершин с определенными скалярными весами: a*A+b*B+c*C. Эти веса a, b, c и есть те веса что ты ищешь для смешения. В вершине A коээфициент a=1, а b=c=0 и так далее.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.