Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Математика

Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр

Ответ
 
Опции темы
Старый 06.01.2013, 17:19   #1
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Не линейная зависимость чисел

Известен ли вам наиболее простой способ привязать число к другому числу. К примеру некое А изменяется от 0 до 100, а некое В изменяется от 0 до 5 или от 5 до 10(просто кпримеру). Причем изменение В происходит только когда А<=20 и А>=0. То есть А=0 В=0; A=5 B=0.8(или сколько там) и.т.д. Так вот какие есть способы. В голову приходят только такие варианты. если А(0,50) В(0,5) то В=А/10. А если мне надо будет в случае А>50 начать уменьшать В. Как такие зависимости выстроить? обычным условием? Надеюсь не слишком цифрами и примерами загрузил)
(Offline)
 
Ответить с цитированием
Старый 06.01.2013, 18:37   #2
jimon
 
Сообщений: n/a
Ответ: Не линейная зависимость чисел

A от 0 (a1) до 100 (a2)
B от 5 (b1) до 10 (b2) когда A от 0 (a3) до 20 (a4)

идея в том что мы строим воображаемый график зависимости значения B от некоторого параметра t, скажем если t = 0 то B = b1, если t = 1 то B = b2
потом мы преобразовываем нужный нам промежуток значений A в значение t, помним что t не может быть меньше 0 и не может быть больше 1

float clamp(x, a, b)
{
	return min(max(x, a), b);
}

float t = clamp((A - a3) / (a4 - a3), 0.0, 1.0);
B = t * (b2 - b1) + b1
если подставить числа

float t = clamp((A - 0) / (20 - 0), 0.0, 1.0)
B = t * (10 - 5) + b1
если зависимость B от t сложнее одной функции то результат считают через условия :

float t = ...

if(t < 0.4) // часть от [0.0, 0.4) где 0.4 не включительно
{
	float t2 = (t - 0.0) / (0.4 - 0.0); // t2 уже будет от 0 до 1 для этого сегмента
	B = t2 * ...
}
else if(t < 0.8) // часть [0.4, 0.8)
{
	float t2 = (t - 0.4) / (0.8 - 0.4);
	B = ...
}
else // часть [0.8, 1.0]
{
	float t2 = (t - 0.8) / (1.0 - 0.8);
	B = ...
}
правда в последнем примере нужно быть немного осторожным, ведь по-сути значение t2 в условиях никогда (кроме последнего) не достигает еденицы, но в общем из-за неточности представления чисел с плавающей запятой и неточностей накладываемых системой анимации то можно забить
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
CRASHER (06.01.2013)
Старый 06.01.2013, 19:51   #3
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Не линейная зависимость чисел

Млииин!)) Умно то как!!))) Пасиб, очень полезное знание!)
единственное когда ты подставлял числа ты b1 не заменил, забыл наверн. А так ваще шикарно!))
(Offline)
 
Ответить с цитированием
Старый 06.01.2013, 21:41   #4
CRASHER
Разработчик
 
Регистрация: 08.03.2007
Сообщений: 530
Написано 31 полезных сообщений
(для 36 пользователей)
Ответ: Не линейная зависимость чисел

А как переименовать тему?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 23:12.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com