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)) {
|