Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос про проценты (http://www.flasher.ru/forum/showthread.php?t=209908)

Godwarlock 07.01.2015 00:08

Вопрос про проценты
 
Всем привет. Столкнулся с такой проблемой, хотя скорее это будет вопрос. Мы имеем например целое число 500 , другое значение зависимое от этого числа будет равно 30%. То есть максимальное значение 500 и максимальный процент другого значения 30. Каким образом, мне в коде выразить процентный шанс, например активации какого-либо события. Через mathrandom? Подскажите какие вообще варианты могут быть

GBee 07.01.2015 00:39

Ничего не понял. Может пример приведете?

Godwarlock 07.01.2015 01:13

Есть к примеру переменные:
Код AS3:

agility = 500; // Ловкость равна 500
dodge = 30; //Переменная dodge, её значение зависит от agility, только в процентном соотношении. В нашем случае agility имеет максимально значение(выше не поднимается), поэтому и переменная dodge имеет свои постоянные 30 процентов.

Теперь, к примеру, есть объект. Не буду мудрить, пусть это будет человек. Он имеет такие характеристики, как agility и dodge. В этого человека летит пуля, попадание её в человека, зависит от значения переменной dodge. Как мне просчитать вероятность попадания пули, исходя из процентного соотношения? 70% того, что пуля попадет в человека и 30%, что нет. То есть запускается ф-ция, там исходя из значения dodge генерируется вероятность шанса попадания пули в человека. Вот каким образом, реализовать эту самую генерацию? И что если например dodge не обязательно будет равен 30%, он может быть равен и 27,5 и 8,3 к примеру. Исходя из этих значения, будет просчитываться вероятность)

ZackMercury 07.01.2015 01:25

Я, конечно, может, чего не понял, но
Math.random() - 0.3(процентное соотношение) .
Если Math.random() -(минус) 0.3 меньше или равно нулю - то рандом попал в промежуток тридцати процентов.
Итого

Код AS3:

var agility:int = 500;
var dodge:Number = 0.3;
 
var result:Boolean = Math.random() - dodge <= 0;

Где у вас dodge зависит от agility я так и не понял.

Кхм... Взглянул на получившееся неравенство и...
Подумал об упрощении.

Код AS3:

var agility:int = 500;
var dodge:Number = 0.3;
 
// Прибавим dodge к обеим частям неравенства, и в итоге получим
 
var result:Boolean = Math.random() <= dodge;

Теперь должно выглядеть ясней, а то я намудрил ^^

Думаю, если вам понадобится перевести проценты в десятичную дробь, вы сможете сделать это без моей помощи))

illuzor 07.01.2015 01:45

Всё гораздо проще.

Код AS3:

if(Math.random() <=0.3){
  // промахнулся
} else {
  // попал
}


Godwarlock 07.01.2015 01:47

А если процент, будет составлять 1,8? Как тогда? так?

Код AS3:

if(Math.random() <=0.018){
  // промахнулся
} else {
  // попал
}


illuzor 07.01.2015 01:52

Godwarlock, да

Godwarlock 07.01.2015 02:03

Спасибо всем за ответы)

GBee 08.01.2015 18:15

А где 500?

ZackMercury 08.01.2015 22:21

Цитата:

Сообщение от GBee (Сообщение 1177308)
А где 500?

Сдаётся мне, он хотел сделать так, чтобы dodge 30% были пропорциональны 500 в agility.

Код AS3:

var agility:int = 500;
var dodge:Number = agility/500 * 0.3;

В опущенном виде

Код AS3:

if(Math.random() <= agility/500 * 0.3){
  // промахнулся
} else {
  // попал
}

Но всё-таки, я предполагаю, что этот код будет выполняться с определённым интервалом, поэтому пусть результат исчисления хранится в переменной dodge, заранее просчитанный.

Код AS3:

var agility:int = 500;
var dodge:Number = agility/500 * 0.3;
 
if(Math.random() <= dodge){
  // промахнулся
} else {
  // попал
}

P.S. Обожаю несложные математические задачки :)


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.