Как я могу сделать эту математическую формулу в JavaScript - PullRequest
2 голосов
/ 12 июня 2019

Мне нужно выяснить, каков объем жидкости, оставленной в цилиндре на его стороне в JavaScript, как я буду делать следующее в коде?

enter image description here

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Вы можете использовать:

  • ** оператор для полномочий (или Math.pow)
  • Math.acos для cos^(-1)
  • Math.sqrt для квадратного корня

console.log(calculateVolumeInCylinder(1.08, 2.4, 0.72))

/**
 * @param {number} Dm - Cylinder diameter in meters.
 * @param {number} L - Cylinder length in meters.
 * @param {number} Dp - Depth in meters.
 * @returns {number} Volume in liters.
 */
function calculateVolumeInCylinder(Dm, L, Dp) {
  let R = Dm / 2,
    // R^2 cos^-1(R-D/R)
    sA = R ** 2 * Math.acos((R - Dp) / R),
    // (R-D)
    sB = (R - Dp),
    // SQRT(2RD-D^2)
    sC = Math.sqrt(2 * R * Dp - Dp ** 2);
    
  return (L * (sA - sB * sC)) * 1000;
}
1 голос
/ 12 июня 2019

Привет Шубх и Мэтт Мейджор Спасибо !!!!мне удается сделать это через следующее.

function round(d)
// Returns a number rounded to 4 decimal places.
{ var multiplier = 10000;
  return Math.round(d*multiplier) / multiplier;
};


function negative(n)
{ if(n<0)
     complain("Negative input");
  return (n<0);
}

function calculate(vdiam,vlen,vdepth){ 

  //var vdiam  = 1.08;
  //var vlen   = 2.40;
  //var vdepth = 0.72;
  var res = 0;  //result


  //Convert inputs to numbers
  d = new Number(vdiam);
  l = new Number(vlen);
  h = new Number(vdepth);
  r = d/2;

  if(negative(d)) return;
  if(negative(l)) return;
  if(negative(h)) return;

  //make sure it's all kosher
  if(h>d)
	{ console.log("Depth exceeds diameter");
      return;
    }



  //calculate
  var segArea =r*r*Math.acos((r-h)/r) - (r-h)*Math.sqrt(2*r*h-h*h);
  res = segArea*l;
  if(isNaN(res))
	{ console.log("Inputs must be positive numbers");
	  res = "";
      return;
	}

	res = res*1000;
  
  return round(res);

}


alert(calculate(1.08,2.40,0.72));
1 голос
/ 12 июня 2019

Вы можете попробовать что-то вроде этого. Я использовал Math.acos и Math.pow . А остальное - простая математика.

Так как Math.acos возвращает NaN, если число не находится между (-1 и 1) , поэтому я проверил раньше, если ACOS возвращает NaN

function volume(diameter, depth, length) {
  let R = diameter / 2;

  if (Math.acos((R - depth )/ R) != NaN) {
    let a = Math.pow(R, 2) * Math.acos((R - depth) / R) - (R - depth) * (Math.pow((2 * R * depth - Math.pow(depth, 2)), 0.5))

return a * length;
 } else {
return "Cylinder radius can't be less than depth"

  }
}
// returns volume in meter cube
// 1 meter cube =1000l
console.log(volume(1.08, 0.72, 2.40)*1000,"L")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...