Как посчитать совместимость 2-х биоритмов?
Нужно посчитать совместимость биоритмов 2-х людей.
Биоритм 1 человека(01/06/1980)
'physical': -26.97
'emotional': 97.49
'intellectual': -37.16
Биоритм 2 человека(01/04/1922)
'physical': -94.22
'emotional': 9.81
'intellectual': -99.88
Результат, который должен получиться:
'physical': 47.83
'emotional': 57.14
'intellectual': 63.64
P.S Результат получил с сайта https://lyna.info/biocompcalc/
В интернете нашел формулу:
Но результат все равно не тот:
'physical': 33.62
'emotional': 48.74
'intellectual': 31.36
Ответы (1 шт):
Поскольку расчеты не базируются на каких-либо научных данных, либо методика по которой рассчитывается формула нам неизвестна и её могли выдумать от балды, то можно обойтись следующим вариантом. Раз функция у них основана на повторяющихся данных и зависит от дня, то можно сделать свою функцию на полученных данных.
На примере физической совместимости:
0d = 100%
1d = 91.3%
2d = 82.61%
3d = 73.91%
4d = 65.22%
5d = 56.52%
6d = 47.83%
7d = 39.13%
8d = 30.43%
9d = 21.74%
10d = 13.04%
11d = 4.35%
12d = 4.35%
13d = 13.04%
14d = 21.74%
15d = 30.43%
16d = 39.13%
17d = 47.83%
18d = 56.52%
19d = 65.22%
20d = 73.91%
21d = 82.61%
22d = 91.3%
23d = 100%
Для остальных характеристик будут меняться только кол-во дней и их значения, там их больше 23-х, но вполне можно перебрать все. Разница между значениями 8.7%, всего 23 дня, поэтому можно вполне воспользоваться следующей формулой:
100 - 8.7 * (|t1 - t2| % 23)
Разница будет в пару десятых из-за округления. Если надо значения один в один как на том сайте, то можно просто завести массив значений и получать индекс.
arr[|t1 - t2| % 23]
С другими значениями можно поступить точно так же, но это уже вы как-нибудь сами))
Оба варианта:
$("#calc1").click(() => {
let result = Math.abs(100 - 8.7 * (diff() % 23));
$("#result1").val(result.toFixed(2));
})
$("#calc2").click(() => {
let arr = [100, 91.3, 82.61, 73.91, 65.22, 56.52, 47.83, 39.13, 30.43, 21.74, 13.04, 4.35, 4.35, 13.04, 21.74, 30.43, 39.13, 47.83, 56.52, 65.22, 73.91, 82.61, 91.3, 100];
let result = arr[Math.abs(diff() % 23)];
$("#result2").val(result.toFixed(2));
})
function diff(){
let date1 = new Date($("#first").val());
let date2 = new Date($("#second").val());
return Math.ceil(Math.abs(date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="first">Первый партнер:</label>
<input type="date" id="first"
value="2018-07-22">
<br /><br />
<label for="second">Второй партнер:</label>
<input type="date" id="second"
value="2018-07-22">
<br /><br />
<input type=text id="result1"></input>
<button id="calc1">Проценты</button>
<input type=text id="result2"></input>
<button id="calc2">Массив</button>
