/// <summary> /// вычесление коафицентов методом гаусса-жордана /// </summary> /// <param name="imgList">список картинок</param> /// <param name="w">ширина</param> /// <returns></returns> public static float[] GausJordan(ImgFile[] imgList,int w) { var n = imgList.Count(); var coaf = new float[n, n]; var res = new float[n]; for (var i = 0; i < n; i++) { coaf[0, i] = imgList[i].W; if (i == 0) res[i] = w; else res[i] = 0; } for (var i = 0; i < n - 1; i++) { coaf[i + 1, 0] = imgList[0].H; coaf[i + 1, i + 1] = -imgList[i + 1].H; } var a = coaf; var b = res; for (var i = 0; i < n - 1; i++) { for (var j = i + 1; j < n; j++) { var s = a[j, i] / a[i, i]; for (var k = i; k < n; k++) { a[j, k] -= a[i, k] * s; } b[j] -= b[i] * s; } } for (var i = n - 1; i >= 0; i--) { b[i] /= a[i, i]; a[i, i] /= a[i, i]; for (var j = i - 1; j >= 0; j--) { var s = a[j, i] / a[i, i]; a[j, i] -= s; b[j] -= b[i] * s; } } return Enumerable.Range(0, n).Select(i => b[i] / a[i, i]).ToArray(); }
/// <summary> /// получить раскадровку по горизонтали /// </summary> /// <param name="width">ширина</param> /// <returns></returns> public JsonResult GetImgList(string width) { var w = JsonConvert.DeserializeObject<int>(width); var imgList = Helper.GetImgList().ToArray(); var sol = Helper.GausJordan(imgList,w); var newimgList = new ImgFile[imgList.Length]; for (var i = 0; i < imgList.Length; i++) { var newImgFile = new ImgFile { H = (int) (sol[i]*imgList[i].H), W = (int) (sol[i]*imgList[i].W), Name=imgList[i].Name }; newimgList[i] = newImgFile; } return Json(newimgList, JsonRequestBehavior.AllowGet); }