DmitrMakeev commited on
Commit
60c5f5e
·
verified ·
1 Parent(s): 418e38e

Update calculate.html

Browse files
Files changed (1) hide show
  1. 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]] // Примерные данные для KCl
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)) {