Как превратить процент в такое число?

У меня есть вот такой список данных которые я получил методом тыка

100 =  1072693248
99.9 = 1072692198 // 100 - 99.9 =  1050
99.8 = 1072690101 // 99.9 - 99.8 = 2097
99.7 = 1072688004 // 99.8 - 99.7 = 2097
99.6 = 1072685906 // 99.7 - 99.6 = 2098
99.5 = 1072683810
99.4 = 1072681713
99.3 = 1072679616
99.2 = 1072677519
99.1 = 1072675421
99.0 = 1072673324
98.9 = 1072671227
98.8 = 1072669130
98.7 = 1072667032
98.6 = 1072664935
98.5 = 1072662838 
98.4 = 1072660741
98.3 = 1072658644
98.2 = 1072656547
98.1 = 1072654450
98.0 = 1072652353
97.9 = 1072650256
97.8 = 1072648159
97.7 = 1072646062
97.6 = 1072643964
97.5 = 1072641867
97.4 = 1072639770
97.3 = 1072637673
97.2 = 1072635576
97.1 = 1072633479
97.0 = 1072631381
90.0 = 1072484580
89.9 = 1072482483
75.0 = 1072170008 
74.9 = 1072167911 // 75.0 - 74.9 =2097
70.0 = 1072065150 
69.9 = 1072063052 // 70.0 - 69.9 =2098
65.0 = 1071960292 
64.9 = 1071958195 // 65.0 - 65.0 =2097
60.0 = 1071855435
59.9 = 1071853337 // 60.0 - 59.9 =2098
55.0 = 1071750577
54.9 = 1071748480 // 55.0 - 55.0 =2097
50.0 = 1071645720
49.9 = 1071642574 // 50.0 - 49.9 =3146
45.0 = 1071437053
44.9 = 1071432859 // 45.0 - 44.9 =4194
40.0 = 1071227338
39.9 = 1071223143 // 40.0 - 39.9 =4195
35.0 = 1071017623
34.9 = 1071013428 // 35.0 - 34.9 =4195
30.0 = 1070807907
29.9 = 1070803713 // 30.0 - 29.9 =4194
25.0 = 1070598192  
24.9 = 1070591901 // 25.0- 24.9 = 6291
20.0 = 1070180859
19.9 = 1070172470 // 20.0 -19.9 = 8389
15.0 = 1069761429
14.9 = 1069753039 // 15.0 -14.9 = 8390
10.0 = 1069136477
9.9 =  1069119700 // 10.0 - 9.9 = 16777
9.8 =  1069102923 // 9.9 - 9.8 =  16777
9.7 =  1069086146 // 9.8 - 9.7 =  16777
9.6 =  1069069369 // 9.7 - 9.6 =  16777
9.5 =  1069052591 // 9.6 - 9.5 =  16778
9.4 =  1069035814 // 9.5 - 9.4 =  16777
9.3 =  1069019037 // 9.4 - 9.3 =  16777
9.2 =  1069002260 // 9.3 - 9.2 =  16777
9.1 =  1068985482 // 9.2 - 9.1 =  16778
9.0 =  1068968705 // 9.1 - 9.0 =  16777
5.0 =  1068096289 
4.9 =  1068062735 // 5.0 - 4.9 =  33554
4.8 =  1068029181 // 4.9 - 4.8 =  33554
4.7 =  1067995627 // 4.8 - 4.7 =  33554
4.6 =  1067962072 // 4.7 - 4.6 =  33555
4.5 =  1067928518 // 4.6 - 4.5 =  33554
4.4 =  1067894963 // 4.5 - 4.4 =  33555
4.3 =  1067861409 // 4.4 - 4.3 =  33554
4.2 =  1067827855 // 4.3 - 4.2 =  33554
4.1 =  1067794300 // 4.2 - 4.1 =  33555
4.0 =  1067760746 // 4.1 - 4.0 =  33554
3.5 =  1067592974
3.4 =  1067559419 // 3.5 - 3.4 =  33555
3.0 =  1067400035
2.9 =  1067332926 // 3.0 - 2.9 =  67109
2.5 =  1067064491
2.4 =  1066997382 // 2.5 - 2.4 =  67109
2.0 =  1066728947
1.9 =  1066661838 // 2.0 - 1.9 =  67109
1.5 =  1066385013
1.4 =  1066250796 // 1.5 - 1. 4=  134217
1.0 =  1065713925 
0.9 =  1065579708 // 1.0 - 0.9 =  134217
0.8 =  1065445489 // 0.9 - 0.8 =  134219
0.7 =  1065269329 // 0.8 - 0.7 =  176160
0.6 =  1065000893 // 0.7 - 0.6 =  268436
0.5 =  1064732458 // 0.6 - 0.5 =  268435
0.4 =  1064464023 // 0.5 - 0.4 =  268435
0.3 =  1064086535 // 0.4 - 0.3 =  377488
0.2 =  1063549664 // 0.3 - 0.2 =  536871
0.1 =  1062769523 // 0.2 - 0.1 =  780141
0.0 =  1061184077 // 0.1 - 0.0 =  1585446

иногда случается погрешность в 1 или 2 цифре между одним целым процентом 99.0 и 98.0 Я построил вот такую формулу но она работает только до 75.0 с небольшой погрешностью

val = 75.0
console.log(Math.round(      1072693248- (100 - Math.round(val)*2) - 1050 - 2097 * (999 - val * 10)            ))

Кто нибудь знает формулу по которой я из 49.9 могу получить вот это 1071642574 с минимальной погрешностью?

Судя по имеющимся данным скорее всего формула выглядит примерно так

введите сюда описание изображения

Update

Изучая данные я понял что

Первое

1-2 цифры постоянно гуляют между каждым 0.1%. Возможно это связано с округлением

Второе

размер разницы значения увеличивается в 2 также как и периодичность возрастания. Другими словами после каждых 50% 25%, 12.5% и так далее размер разницы увеличивается в 2 раза. например 2097 больше 4194 в 2 раза.

Третье

Ровно по середине между сменой разницы значений, разница уменьшается ровно в 1.5 раза .Например между 50.0 и 49.9 расстояние равно 3146, что в 1.5 раза больше 2097.

Скажите пожалуйста где я в своих данных допустил ошибку

console.clear();
(function() {
  let data = getData();
  let canvas = document.getElementById('canvas');
  let ctx = canvas.getContext('2d');

  window.onresize = draw;
  draw();

  function draw() {
	let vw = canvas.width = window.innerWidth - 30;
	let vh = canvas.height = window.innerHeight - 20;

	real_data();
	attempt();

	function real_data() {
	  ctx.fillStyle = "black";
	  data.forEach(function(p) {
		let cx = vw * p[0] / 100;
		let cy = vh - vh * (p[1] - 1061184077) / (1072693248 - 1061184077);
		console.log(['blue',p[0],p[1]])
		point(cx, cy, 5);
	  });
	}

	function attempt() {
	  ctx.fillStyle = "orange";
	  
	  
	  
	  
	  data.forEach(function(p) {
		let cx = vw * p[0] / 100;

		
		
		
		let percent = p[0] //Процент
		let y; // Число
		
		
		
		let err = Math.floor((100-percent)*1.5) ;//погрешность
    
		let max = 1072693248
		let min = 1061184077
		
		let hund = 100
		
		
		let if_val_1 = hund-0.1;
		let if_val_2 = (hund/Math.pow(2, 1)).toFixed(1)
		let if_val_3 = if_val_2-0.1
		let if_val_4 = (hund/Math.pow(2, 2)).toFixed(1)
		let if_val_5 = if_val_4-0.1
		let if_val_6 = (hund/Math.pow(2, 3)).toFixed(1)
		let if_val_7 = if_val_6-0.1
		
		
		
		let if_val_8 = (hund/Math.pow(2, 4)).toFixed(1)
		let if_val_9 = if_val_8-0.1
		let if_val_10 = (hund/Math.pow(2, 5)).toFixed(1)
		let if_val_11 = if_val_10-0.1
		let if_val_12 = (hund/Math.pow(2, 6)).toFixed(1)
		let if_val_13 = if_val_12-0.1
		let if_val_14 = (hund/Math.pow(2, 7)).toFixed(1)
		let if_val_15 = if_val_14-0.1
		let if_val_16 = (hund/Math.pow(2, 8)).toFixed(1)
		
		
		
		
		
		
		
		
		
		
		
		let half_1 = 1050
		let starto = 2097
		
		
		
		let sum_1 = max - err - half_1
		
		
		
		
		let col_2 =  999 - 10 * (percent )
		
		
		let sum_2 = sum_1 - starto * col_2
		
		let sum_3 = sum_1 - starto * (999-10*(if_val_3+0.1)) - Math.round(starto*1.5)
		
		
		let col_4 =  999 - 10 * (percent + if_val_3 + 0.1   )
		let sarto_4 = starto * Math.pow(2, 1)
		let sum_4 = sum_3 - sarto_4*col_4
		
		let sum_5 = sum_4 - Math.round(sarto_4*1.5)
		
		let col_6 =  999 - 10 * (percent + if_val_3 + if_val_5 + 0.2   )
		let sarto_6 = starto * Math.pow(2, 2)
		let sum_6 = sum_5 - sarto_6*col_6
		
		let sum_7 = sum_6 - Math.round(sarto_6*1.5)
		
		let col_8 =  999 - 10 * (percent + if_val_3 + if_val_5 + if_val_7 + 0.3   )
		let sarto_8 = starto * Math.pow(2, 3)
		let sum_8 = sum_7 - sarto_8*col_8
		
		
		
		let sum_9 = sum_8 - Math.round(sarto_8*1.5)
		
		
		let col_10 =  999 - 10 * (percent + if_val_3 + if_val_5 + if_val_7 +if_val_9 + 0.4   )
		let sarto_10 = starto * Math.pow(2, 4)
		let sum_10 = sum_9 - sarto_10*col_10
		
		
		
		let sum_11 = sum_10 - Math.round(sarto_10*1.5)
		
		let col_12 =  999 - 10 * (percent + if_val_3 + if_val_5 + if_val_7 +if_val_9 + if_val_11 + 0.5   )
		let sarto_12 = starto * Math.pow(2, 5)
		let sum_12 = sum_11 - sarto_12*col_12
		
		
		let sum_13 = sum_12 - Math.round(sarto_12*1.5)
		
		
		
		let col_14 =  999 - 10 * (percent + if_val_3 + if_val_5 + if_val_7 +if_val_9 + if_val_11 + if_val_13+0.6   )
		let sarto_14 = starto * Math.pow(2, 6)
		let sum_14 = sum_13 - sarto_14*col_14
		
		
		let sum_15 = sum_14 - Math.round(sarto_14*1.5)
		
		
		let col_16 =  999 - 10 * (percent + if_val_3 + if_val_5 + if_val_7 +if_val_9 + if_val_11 + if_val_13+if_val_15+0.7   )
		let sarto_16 = starto * Math.pow(2, 7)
		let sum_16 = sum_15 - sarto_16*col_16
		
		
		
		
		
		
		
		
		
		
		
		
		if (percent == hund) {
			y = max
			ctx.fillStyle = "red";
		} 
		else if (percent == if_val_1) {
			y = sum_1
			ctx.fillStyle = "black";
		}
		else if (percent >= if_val_2) {
			y = sum_2
			ctx.fillStyle = "orange";
		}
		else if (percent == if_val_3) {
			ctx.fillStyle = "green";
			y = sum_3
		}
		else if (percent >= if_val_4) {
			ctx.fillStyle = "red";
			y = sum_4
		}
		else if (percent == if_val_5) {
		y = sum_5
		ctx.fillStyle = "green";
		}
		else if (percent >= if_val_6) {
			y = sum_6
			ctx.fillStyle = "blue";
		}
		
		
		else if (percent == if_val_7) {
			y = sum_7
			ctx.fillStyle = "blue";
		}
		
		
		else if (percent == if_val_8) {
			y = sum_8
			ctx.fillStyle = "blue";
		}
		
		
		
		
		else if (percent == if_val_9) {
			y = sum_9
			ctx.fillStyle = "blue";
		}
		
		
		
		else if (percent >= if_val_10) {
			y = sum_10
			ctx.fillStyle = "blue";
		}
		
		else if (percent == if_val_11) {
			y = sum_11
			ctx.fillStyle = "blue";
		}
		
		
		else if (percent >= if_val_12) {
			y = sum_12
			ctx.fillStyle = "blue";
		}
		
		else if (percent == if_val_13) {
			y = sum_13
			ctx.fillStyle = "blue";
		}
		
		else if (percent >= if_val_14) {
			y = sum_14
			ctx.fillStyle = "blue";
		}
		
		else if (percent == if_val_15) {
			y = sum_15
			ctx.fillStyle = "blue";
		}
		else if (percent >= if_val_16) {
			y = sum_16
			ctx.fillStyle = "blue";
		}
		
		
		else {
		ctx.fillStyle = "brown";
		y = min + (max - min) * p[0] ** 0.35 / 3;
		}

		let cy = vh - vh * (y - min) / (max - min);

		console.log(['orange',p[0],y])
		point(cx, cy, 3);
	  });
	}
  }

  function point(cx, cy, r = 2) {
	ctx.beginPath();
	  ctx.arc(cx, cy, r, 0, 2 * Math.PI);
	  ctx.fill();
  }

  function getData() {
	  return [
	[100 , 1072693248 ],[
	99.9 , 1072692198 ],[  //  100 - 99.9 ,  1050
	99.8 , 1072690101 ],[  //  99.9 - 99.8 , 2097
	99.7 , 1072688004 ],[  //  99.8 - 99.7 , 2097
	99.6 , 1072685906 ],[  //  99.7 - 99.6 , 2098
	99.5 , 1072683810 ],[
	99.4 , 1072681713 ],[
	99.3 , 1072679616 ],[
	99.2 , 1072677519 ],[
	99.1 , 1072675421 ],[
	99.0 , 1072673324 ],[
	98.9 , 1072671227 ],[
	98.8 , 1072669130 ],[
	98.7 , 1072667032 ],[
	98.6 , 1072664935 ],[
	98.5 , 1072662838 ],[
	98.4 , 1072660741 ],[
	98.3 , 1072658644 ],[
	98.2 , 1072656547 ],[
	98.1 , 1072654450 ],[
	98.0 , 1072652353 ],[
	97.9 , 1072650256 ],[
	97.8 , 1072648159 ],[
	97.7 , 1072646062 ],[
	97.6 , 1072643964 ],[
	97.5 , 1072641867 ],[
	97.4 , 1072639770 ],[
	97.3 , 1072637673 ],[
	97.2 , 1072635576 ],[
	97.1 , 1072633479 ],[
	97.0 , 1072631381 ],[
	90.0 , 1072484580 ],[
	89.9 , 1072482483 ],[
	75.0 , 1072170008 ],[
	74.9 , 1072167911 ],[  //  75.0 - 74.9 ,2097
	70.0 , 1072065150 ],[
	69.9 , 1072063052 ],[  //  70.0 - 69.9 ,2098
	65.0 , 1071960292 ],[
	64.9 , 1071958195 ],[  //  65.0 - 65.0 ,2097
	60.0 , 1071855435 ],[
	59.9 , 1071853337 ],[  //  60.0 - 59.9 ,2098
	55.0 , 1071750577 ],[
	54.9 , 1071748480 ],[  //  55.0 - 55.0 ,2097
	51.1 , 1071668788 ],[  // 
	51.0 , 1071666691 ],[  //  51.1 - 51.0 , 2097
	50.1 , 1071647816 ],[
	50.0 , 1071645720 ],[  //  50.1 - 50.0 , 2096
	49.9 , 1071642574 ],[  //  50.0 - 49.9 , 3146
	49.8 , 1071638380 ],[  //  49.9 - 49.8 , 4194
	45.0 , 1071437053 ],[
	44.9 , 1071432859 ],[  //  45.0 - 44.9 ,4194
	40.0 , 1071227338 ],[
	39.9 , 1071223143 ],[  //  40.0 - 39.9 ,4195
	35.0 , 1071017623 ],[
	34.9 , 1071013428 ],[  //  35.0 - 34.9 ,4195
	30.0 , 1070807907 ],[
	29.9 , 1070803713 ],[  //  30.0 - 29.9 ,4194
	25.0 , 1070598192 ],[
	24.9 , 1070591901 ],[  //  25.0- 24.9 , 6291
	20.0 , 1070180859 ],[
	19.9 , 1070172470 ],[  //  20.0 -19.9 , 8389
	15.0 , 1069761429 ],[
	14.9 , 1069753039 ],[  //  15.0 -14.9 , 8390
	10.0 , 1069136477 ],[
	9.9 ,  1069119700 ],[  //  10.0 - 9.9 , 16777
	9.8 ,  1069102923 ],[  //  9.9 - 9.8 ,  16777
	9.7 ,  1069086146 ],[  //  9.8 - 9.7 ,  16777
	9.6 ,  1069069369 ],[  //  9.7 - 9.6 ,  16777
	9.5 ,  1069052591 ],[  //  9.6 - 9.5 ,  16778
	9.4 ,  1069035814 ],[  //  9.5 - 9.4 ,  16777
	9.3 ,  1069019037 ],[  //  9.4 - 9.3 ,  16777
	9.2 ,  1069002260 ],[  //  9.3 - 9.2 ,  16777
	9.1 ,  1068985482 ],[  //  9.2 - 9.1 ,  16778
	9.0 ,  1068968705 ],[  //  9.1 - 9.0 ,  16777
	8.5 ,  1068884819 ],[
	8.4 ,  1068868041 ],[  //  16778
	5.0 ,  1068096289 ],[
	4.9 ,  1068062735 ],[  //  5.0 - 4.9 ,  33554
	4.8 ,  1068029181 ],[  //  4.9 - 4.8 ,  33554
	4.7 ,  1067995627 ],[  //  4.8 - 4.7 ,  33554
	4.6 ,  1067962072 ],[  //  4.7 - 4.6 ,  33555
	4.5 ,  1067928518 ],[  //  4.6 - 4.5 ,  33554
	4.4 ,  1067894963 ],[  //  4.5 - 4.4 ,  33555
	4.3 ,  1067861409 ],[  //  4.4 - 4.3 ,  33554
	4.2 ,  1067827855 ],[  //  4.3 - 4.2 ,  33554
	4.1 ,  1067794300 ],[  //  4.2 - 4.1 ,  33555
	4.0 ,  1067760746 ],[  //  4.1 - 4.0 ,  33554
	3.5 ,  1067592974 ],[
	3.4 ,  1067559419 ],[  //  3.5 - 3.4 ,  33555
	3.0 ,  1067400035 ],[
	2.9 ,  1067332926 ],[  //  3.0 - 2.9 ,  67109
	2.5 ,  1067064491 ],[
	2.4 ,  1066997382 ],[  //  2.5 - 2.4 ,  67109
	2.0 ,  1066728947 ],[
	1.9 ,  1066661838 ],[  //  2.0 - 1.9 ,  67109
	1.5 ,  1066385013 ],[
	1.4 ,  1066250796 ],[  //  1.5 - 1. 4,  134217
	1.0 ,  1065713925 ],[
	0.9 ,  1065579708 ],[  //  1.0 - 0.9 ,  134217
	0.8 ,  1065445489 ],[  //  0.9 - 0.8 ,  134219
	0.7 ,  1065269329 ],[  //  0.8 - 0.7 ,  176160
	0.6 ,  1065000893 ],[  //  0.7 - 0.6 ,  268436
	0.5 ,  1064732458 ],[  //  0.6 - 0.5 ,  268435
	0.4 ,  1064464023 ],[  //  0.5 - 0.4 ,  268435
	0.3 ,  1064086535 ],[  //  0.4 - 0.3 ,  377488
	0.2 ,  1063549664 ],[  //  0.3 - 0.2 ,  536871
	0.1 ,  1062769523 ],[  //  0.2 - 0.1 ,  780141
	0.0 ,  1061184077 ]    //  0.1 - 0.0 ,  1585446
	];
  }
})();
canvas {
  border: 1px solid red;
}
<canvas id="canvas"></canvas>


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

Ну для начала нужно построить хороший график, чтобы лучше понять, какую функцию ищем. У вас на картинке он ступенчатый, а на самом деле растет вполне себе плавно. Там явно какая-то степень между 0 и 1 (напоминание: квадратный корень - это 0.5 степень). Если уже определились с типом функции, остается подобрать ее коэффициенты. Для этого существует Метод Наименьших Квадратов, но с ним возиться очень муторно (а если и подберете - это всё равно будет хорошее приближение, а не настоящая функция).

Зачастую легче подобрать коэффициенты вручную. Особенно, если это данные из РПГ-игры, где разрабы любят придумывать всякие хитрозадуманные фишки: Не факт, что это всё получается из одной формулы.

Хорошо бы сделать инструмент, который быстро будет все рисовать и считать. Это дело удобно организовать здесь — https://liveweave.com/ : Изменения отображаются мгновенно.

Немного поигрался там (функция attempt, значение 'y'), и подобрал такое:

if (процент > 25) {
  y = 1061184077 + (1072693248 - 1061184077) * ((процент / 100) ** 0.15);
} else if (процент > 5) {
  y = 1061184077 + (1072693248 - 1061184077) * ((процент / 120) ** 0.195) / 0.90;
} else {
  y = 1061184077 + (1072693248 - 1061184077) * процент ** 0.35 / 3;
}

console.clear();
(function() {
  let data = getData();
  let canvas = document.getElementById('canvas');
  let ctx = canvas.getContext('2d');

  window.onresize = draw;
  draw();

  function draw() {
    let vw = canvas.width = window.innerWidth - 30;
    let vh = canvas.height = window.innerHeight - 20;

    real_data();
    attempt();

    function real_data() {
      ctx.fillStyle = "blue";
      data.forEach(function(p) {
        let cx = vw * p[0] / 100;
        let cy = vh - vh * (p[1] - 1061184077) / (1072693248 - 1061184077);

        point(cx, cy, 5);
      });
    }

    function attempt() {
      ctx.fillStyle = "orange";
      data.forEach(function(p) {
        let cx = vw * p[0] / 100;

        let y;
        if (p[0] > 25) {
          y = 1061184077 + (1072693248 - 1061184077) * ((p[0] / 100) ** 0.15);
        } else if (p[0] > 5) {
          y = 1061184077 + (1072693248 - 1061184077) * ((p[0] / 120) ** 0.195) / 0.90;
        } else {
          y = 1061184077 + (1072693248 - 1061184077) * p[0] ** 0.35 / 3;
        }

        let cy = vh - vh * (y - 1061184077) / (1072693248 - 1061184077);


        point(cx, cy, 3);
      });
    }
  }

  function point(cx, cy, r = 2) {
    ctx.beginPath();
      ctx.arc(cx, cy, r, 0, 2 * Math.PI);
      ctx.fill();
  }

  function getData() {
      return [
      [100, 1072693248],
      [99.9, 1072692198],
      [99.8, 1072690101],
      [99.7, 1072688004],
      [99.6, 1072685906],
      [99.5, 1072683810],
      [99.4, 1072681713],
      [99.3, 1072679616],
      [99.2, 1072677519],
      [99.1, 1072675421],
      [99.0, 1072673324],
      [98.9, 1072671227],
      [98.8, 1072669130],
      [98.7, 1072667032],
      [98.6, 1072664935],
      [98.5, 1072662838],
      [98.4, 1072660741],
      [98.3, 1072658644],
      [98.2, 1072656547],
      [98.1, 1072654450],
      [98.0, 1072652353],
      [97.9, 1072650256],
      [97.8, 1072648159],
      [97.7, 1072646062],
      [97.6, 1072643964],
      [97.5, 1072641867],
      [97.4, 1072639770],
      [97.3, 1072637673],
      [97.2, 1072635576],
      [97.1, 1072633479],
      [97.0, 1072631381],
      [90.0, 1072484580],
      [89.9, 1072482483],
      [75.0, 1072170008],
      [74.9, 1072167911],
      [70.0, 1072065150],
      [69.9, 1072063052],
      [65.0, 1071960292],
      [64.9, 1071958195],
      [60.0, 1071855435],
      [59.9, 1071853337],
      [55.0, 1071750577],
      [54.9, 1071748480],
      [50.0, 1071645720],
      [49.9, 1071642574],
      [35.0, 1071017623],
      [34.9, 1071013428],
      [40.0, 1071227338],
      [39.9, 1071223143],
      [30.0, 1070807907],
      [29.9, 1070803714],
      [25.0, 1070598192],
      [24.9, 1070591901],
      [20.0, 1070180859],
      [19.9, 1070172470],
      [15.0, 1069761429],
      [14.9, 1069753039],
      [10.0, 1069136477],
      [9.9, 1069119700],
      [9.8, 1069102923],
      [9.7, 1069086146],
      [9.6, 1069069369],
      [9.5, 1069052591],
      [9.4, 1069035814],
      [9.3, 1069019037],
      [9.2, 1069002260],
      [9.1, 1068985482],
      [9.0, 1068968705],
      [5.0, 1068096289],
      [4.9, 1068062735],
      [1.0, 1065713925],
      [0.9, 1065579708],
      [0.2, 1063549664],
      [0.1, 1062769523],
      [0.0, 1061184077],
    ];
  }
})();
canvas {
  border: 1px solid red;
}
<canvas id="canvas"></canvas>

(синие точки получены из реальных данных, оранжевые - из подобранной формулы)

→ Ссылка