Spaces:
Sleeping
Sleeping
Update calculate.html
Browse files- calculate.html +12 -3
calculate.html
CHANGED
|
@@ -54,7 +54,7 @@
|
|
| 54 |
"KNO3": [[5, 1.0011], [280, 1.1627]],
|
| 55 |
"K2SO4": [[5, 1.002], [110, 1.0825]],
|
| 56 |
"KH2PO4": [[5, 1.0016], [110, 1.0719]],
|
| 57 |
-
"KCl": [[5, 1.002], [100, 1.045]]
|
| 58 |
};
|
| 59 |
|
| 60 |
function getDensity(fertilizer, mass) {
|
|
@@ -105,9 +105,18 @@
|
|
| 105 |
const calcElements = { NO3: 0, NH4: 0, P: 0, K: 0, Ca: 0, Mg: 0, S: 0, Cl: 0 };
|
| 106 |
let remaining = { ...need };
|
| 107 |
|
| 108 |
-
//
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
for (let i = 0; i < 10; i++) {
|
| 110 |
for (const [id, elements] of Object.entries(fertilizers)) {
|
|
|
|
| 111 |
const sorted = Object.entries(elements)
|
| 112 |
.filter(([_, v]) => v > 0)
|
| 113 |
.sort(([a], [b]) => (priority[b] || 0) - (priority[a] || 0) + (remaining[b] || 0) / (elements[b] || 1) - (remaining[a] || 0) / (elements[a] || 1));
|
|
@@ -115,7 +124,7 @@
|
|
| 115 |
if (!primary || remaining[primary] <= 0) continue;
|
| 116 |
|
| 117 |
let weight = remaining[primary] / elements[primary];
|
| 118 |
-
weights[id] = weight;
|
| 119 |
|
| 120 |
// Проверяем вклад и корректируем вес, чтобы не превысить цель
|
| 121 |
for (const [elem, value] of Object.entries(elements)) {
|
|
|
|
| 54 |
"KNO3": [[5, 1.0011], [280, 1.1627]],
|
| 55 |
"K2SO4": [[5, 1.002], [110, 1.0825]],
|
| 56 |
"KH2PO4": [[5, 1.0016], [110, 1.0719]],
|
| 57 |
+
"KCl": [[5, 1.002], [100, 1.045]]
|
| 58 |
};
|
| 59 |
|
| 60 |
function getDensity(fertilizer, mass) {
|
|
|
|
| 105 |
const calcElements = { NO3: 0, NH4: 0, P: 0, K: 0, Ca: 0, Mg: 0, S: 0, Cl: 0 };
|
| 106 |
let remaining = { ...need };
|
| 107 |
|
| 108 |
+
// Сначала закрываем NH4 с помощью NH₄NO₃
|
| 109 |
+
const nh4no3Weight = remaining.NH4 / fertilizers["NH4NO3"].NH4;
|
| 110 |
+
weights["NH4NO3"] = nh4no3Weight;
|
| 111 |
+
calcElements.NH4 += nh4no3Weight * fertilizers["NH4NO3"].NH4;
|
| 112 |
+
calcElements.NO3 += nh4no3Weight * fertilizers["NH4NO3"].NO3;
|
| 113 |
+
remaining.NH4 = need.NH4 - calcElements.NH4;
|
| 114 |
+
remaining.NO3 = need.NO3 - calcElements.NO3;
|
| 115 |
+
|
| 116 |
+
// Итеративный расчёт для остальных элементов
|
| 117 |
for (let i = 0; i < 10; i++) {
|
| 118 |
for (const [id, elements] of Object.entries(fertilizers)) {
|
| 119 |
+
if (id === "NH4NO3") continue; // Пропускаем NH₄NO₃, так как уже учтён
|
| 120 |
const sorted = Object.entries(elements)
|
| 121 |
.filter(([_, v]) => v > 0)
|
| 122 |
.sort(([a], [b]) => (priority[b] || 0) - (priority[a] || 0) + (remaining[b] || 0) / (elements[b] || 1) - (remaining[a] || 0) / (elements[a] || 1));
|
|
|
|
| 124 |
if (!primary || remaining[primary] <= 0) continue;
|
| 125 |
|
| 126 |
let weight = remaining[primary] / elements[primary];
|
| 127 |
+
weights[id] = weight;
|
| 128 |
|
| 129 |
// Проверяем вклад и корректируем вес, чтобы не превысить цель
|
| 130 |
for (const [elem, value] of Object.entries(elements)) {
|