成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

如何利用vue實現波譜擬合詳解

瀏覽:4日期:2022-11-05 17:24:39

主頁面-功能介紹

小白初入職場第一篇總結,廢話比較多,求輕噴~

如何利用vue實現波譜擬合詳解

波譜擬合用來對某種材料或物質的譜圖進行識別和分析,每種物質可以有多種成分,每種成分用component1、component2...表示,用Add another component和Remove component來控制每種成分的增加和刪除,每種成分由多種原子核構成,即nuclei,用Add nucleus和Remove nucleus來控制每種成分內原子核數量,每新增一個原子核,波譜就會分裂一次,譜峰數量由(1->2->4->8...)依次分裂。另外可以通過更改默認參數,改變波譜形態,成分參數中:Relative amount表示每種成分占繪圖分量的百分比,百分比之和不超過100,giso用來計算分裂的中心位置,LineWidth用來控設置譜峰到譜谷的寬度,%Lorentzian表示譜峰形態,一共兩種形態,高斯和洛倫茲,兩者之和為100;原子核參數:No of equivalent nuclei用來改變原子核個數,如果一種成分內包含很多個一模一樣的參數時,就可以通過改變這個參數實現,Nuclear spin用來改變原子核種類,Hyperfine用來設置分裂后兩峰之間的寬度。

再來一張圖:

如何利用vue實現波譜擬合詳解

每種成分數量和參數、每種成分內每種原子核數量和參數設置好后,對數據進行處理,由三種結果,卷積、積分、二重積分,那就來看看數據的處理邏輯吧~

如何利用vue實現波譜擬合詳解

從數據流角度,主要進行三步處理:數據->數據裂變->光譜計算->繪圖,左邊是算法實現所需的參數、右邊是對數據及每個步驟的描述。

代碼實現

遇到一個坑,一開始寫demo的時候用的vue+Ant design of vue,在select等其他組件的使用上都是正常的,但是在input number中就很變態了,給input number綁定的change事件,用戶在輸入兩位以上數據的時候,change事件會觸發兩次!!!想避免這個問題,于是用blur事件,問題又來了,因為這個頁面中組件的生成和刪除需要動態渲染,并且根據前面的介紹很容易知道組件的渲染是有兩層結構的,那么在用戶進行點擊或輸入操作的時候,就需要傳遞一個參數(用來定位是哪個component以及每個component下面對應的某一個nucle等等),能力有限( ?□? )目前我沒有找到解決辦法,于是轉elementUI框架。

組件的動態渲染用了一個比較巧妙的辦法,一開始我打算用render來寫,后來從部門大神那里學到通過遍歷列表進行渲染,腦子之間還是有差距的。。。

<div v-for='(Con, i) in componentList' :key='Con[i]'><strong>Component {{i+1}}.</div>

同理原子核的動態渲染也是這么實現的:

<div v-for='(li, j) in nucleusList[i]' :key='li[j]'>{{j+1}}. No of equivalent nuclei:</div>

然后每次增加和刪除只需要操作數組列表的長度即可~

各參數的綁定:component中參數均使用一維數組,chenge事件需傳遞一維數組的下標,component內的nucleui均使用二維數組,change事件需傳遞二維數組的下標。

以上介紹參數定義,接下來是數據處理:

// 首先計算裂變數據stickspectrum (w) { // console.log(’組件信息’, w) const stick = new Array(2) // 返回包含stick[0]的stick光譜數組,stick[1]是位置 stick[0] = new Array()// 光譜強度 stick[1] = new Array()// 光譜位置 stick[1][0] = this.h * this.frequency / (this.r[w].g * this.mu) for (var j = 0; j < this.r[w].equiv.length; j++) { // console.log(’stick[0].length’, stick[0].length) //分裂后的光譜數據長度 for (var i = stick[0].length - 1; i >= 0; i--) { stick[0][i] /= Math.pow((2 * this.r[w].spin[j] + 1), this.r[w].equiv[j]) stick[1][i] -= this.r[w].equiv[j] * this.r[w].spin[j] * this.r[w].hfc[j] for (var k = 0; k < 2 * this.r[w].equiv[j] * this.r[w].spin[j]; k++) { stick[1].splice(i + k + 1, 0, stick[1][i] + this.r[w].hfc[j] * (k + 1)) stick[0].splice(i + k + 1, 0, 0) } for (var k = 0; k < this.r[w].equiv[j]; k++) { for (var m = i + 2 * this.r[w].spin[j] * k; m >= i; m--) { for (var ii = 0; ii < 2 * this.r[w].spin[j]; ii++) {stick[0][m + ii + 1] += stick[0][m] } } } } } return stick },

// 再對裂變后的數據進行光譜計算spectrum (stick) { let xmin = Infinity; let xmax = 0 for (var k = 0; k < this.r.length; k++) { xmin = Math.min(Math.min.apply(Math, stick[k][1]) - 10 * this.r[k].width, xmin) xmax = Math.max(Math.max.apply(Math, stick[k][1]) + 10 * this.r[k].width, xmax) } const tmp = xmax - xmin xmax += tmp * 0.05 xmin -= tmp * 0.05 const step = (xmax - xmin) / (this.No_integers - 1) for (let i = 0; i < this.No_integers; i++) { this.XY[0][i][0] = xmin + step * i this.XY[0][i][1] = 0 this.XYint[0][i][0] = this.XY[0][i][0] this.XYint[0][i][1] = 0 this.XYdoubleint[0][i][0] = this.XY[0][i][0] this.XYdoubleint[0][i][1] = 0 } for (let k = 0; k < this.r.length; k++) { // 分量累加 const sticks = new Array(this.No_integers) for (var i = 0; i < stick[k][0].length; i++) { var j = Math.round((stick[k][1][i] - xmin) / step) sticks[j] = sticks[j] ? sticks[j] + stick[k][0][i] : stick[k][0][i] } const tmp = new Array(this.No_integers)// 第一種光譜繪圖位置數據 let ind = 0 for (var i = 0; i < this.No_integers; i++) { if (sticks[i]) { // 建立峰值索引——sticks[i]===1即峰值所在。 tmp[ind] = i ind++ } } const tmpint = new Array(this.No_integers) // 用來保存每個分量的積分 const tmpdoubleint = new Array(this.No_integers) // 用來保存每個分量的二重積分 for (var i = 0; i < this.No_integers; i++) tmpint[i] = 0 tmpdoubleint[0] = 0 const rwid = Number(this.r[k].width) const rwid2 = Math.pow(rwid, 2) const lortmp = Number(this.r[k].percent) * Number(this.r[k].lor) / 100 * Math.sqrt(3) / Math.PI // 洛倫茲線乘積 const gaustmp = Number(this.r[k].percent) * (100 - Number(this.r[k].lor)) / 100 * Math.sqrt(2 / Math.PI) // 高斯線乘法器 for (let i = 0; i < this.No_integers; i++) { for (let j = 0; j < ind; j++) { const delta = this.XY[0][i][0] - this.XY[0][tmp[j]][0] const delta2 = Math.pow(delta, 2) if ((rwid > step && Math.abs(-0.5 * rwid - delta) < 0.5 * step) || (rwid < step && -0.5 * rwid - delta > 0 && -0.5 * rwid - delta < step)) { this.XY[0][i][1] += sticks[tmp[j]] * (lortmp * 0.5 / rwid2 + gaustmp * 2 / Math.sqrt(Math.E) / rwid2) } else if ((rwid > step && Math.abs(0.5 * rwid - delta) < 0.5 * step) || (rwid < step && delta - 0.5 * rwid > 0 && delta - 0.5 * rwid < step)) { this.XY[0][i][1] -= sticks[tmp[j]] * (lortmp * 0.5 / rwid2 + gaustmp * 2 / Math.sqrt(Math.E) / rwid2) } else { this.XY[0][i][1] += sticks[tmp[j]] * (gaustmp * (-4) / rwid / rwid2 * delta * Math.exp(-2 * delta2 / rwid2) + lortmp * (-delta) * rwid / Math.pow((delta2 + 3 / 4 * rwid2), 2)) // 其他情況下的正常計算,高斯+洛倫茲 } this.dataarray = [this.XY, this.XYint, this.XYdoubleint] tmpint[i] += sticks[tmp[j]] * (gaustmp * Math.exp(-2 * delta2 / rwid2) / rwid + lortmp / 2 / rwid / (0.75 + delta2 / rwid2)) // 高斯+洛倫茲積分-明確計算以避免積分誤差 } } for (let j = 1; j < this.No_integers; j++) { tmpdoubleint[j] = tmpdoubleint[j - 1] + step * (tmpint[j] + tmpint[j - 1]) / 2 } // 二重積分 // console.log(’二重積分’, tmpdoubleint) const mm = tmpdoubleint[this.No_integers - 1] / Number(this.r[k].percent) // 有多少積分高于理論(只發生在非常尖銳的線) for (let j = 1; j < this.No_integers; j++) { this.XYdoubleint[0][j][1] += mm > 1 ? tmpdoubleint[j] / mm : tmpdoubleint[j] // 第三種頻譜數據 如果二重積分高于理論,將其標準化 this.XYint[0][j][1] += tmpint[j] // 第二種頻譜數據 } } // console.log(’XYint’, this.XYint[0]) },

計算完成的光譜,返回三種數據XY、XYint、XYdouble,然后就是繪圖~

到此這篇關于如何利用vue實現波譜擬合的文章就介紹到這了,更多相關vue實現波譜擬合內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91黄色免费看| 欧美成人猛片aaaaaaa| 一区二区欧美在线观看| 欧美美女激情18p| 亚洲黄色高清| 成人性生交大片免费看中文| 日本系列欧美系列| 亚洲免费伊人电影| 国产人成亚洲第一网站在线播放| 在线欧美小视频| 一本一本久久a久久精品综合妖精| 99久久精品国产麻豆演员表| 日产国产欧美视频一区精品 | 欧美日韩一区二区三区视频| 影音先锋在线一区| 91一区二区在线观看| 国产一区二区三区不卡在线观看| 五月婷婷综合激情| 亚洲欧美乱综合| 国产精品无人区| 日韩精品一区二区三区视频| 欧洲精品在线观看| 在线精品观看| 亚洲欧美视频在线观看| 亚洲色诱最新| 午夜影视日本亚洲欧洲精品| 久久永久免费| 美女一区二区久久| 欧美日本一道本| 另类欧美日韩国产在线| 欧美日韩精品一区视频| 国产成人亚洲综合a∨婷婷| 26uuu色噜噜精品一区二区| 亚洲欧美综合国产精品一区| 亚洲欧洲日韩在线| 鲁大师成人一区二区三区| 日韩不卡在线观看日韩不卡视频| 国产精品日韩精品欧美精品| 亚洲成av人片在www色猫咪| 老司机久久99久久精品播放免费| 久久电影网站中文字幕| 欧美一级久久久久久久大片| 欧美午夜精品电影| 欧美另类videos死尸| 亚洲经典在线| 亚洲国产成人私人影院tom| 夜久久久久久| 日韩精品免费视频人成| 欧美一级专区免费大片| aa级大片欧美| 日韩美女视频一区二区| 久热re这里精品视频在线6| 免播放器亚洲| 日本电影欧美片| 欧美精品一二三四| 欧美一区二区播放| 精品国产乱码久久久久久久久| 日韩一级二级三级| 久久奇米777| 亚洲欧洲www| 中文一区一区三区高中清不卡| 中文字幕va一区二区三区| 亚洲激情av在线| 国产精品高潮久久久久无| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美成人亚洲| 欧美日韩一区在线观看视频| 午夜亚洲福利| 国产欧美一区二区视频| 色综合 综合色| 7777精品久久久大香线蕉| 精品国产亚洲一区二区三区在线观看| 国产亚洲精久久久久久| 一区二区三区欧美激情| 免费人成在线不卡| 国产福利一区二区三区| 欧美日韩高清在线一区| 亚洲资源av| 欧美视频你懂的| 久久先锋影音av鲁色资源网| 欧美激情一区二区三区全黄| 亚洲一区二区三区爽爽爽爽爽| 日韩精品91亚洲二区在线观看| 国产精品1区2区3区| 欧美日韩第一区| 老司机精品久久| 欧美一区二区三区人| 国产精品人妖ts系列视频| 亚洲图片欧美色图| 国产精品白丝jk黑袜喷水| 91无套直看片红桃| 亚洲一区二区三区精品在线观看| 欧洲精品一区二区| 国产网站一区二区三区| 亚洲不卡av一区二区三区| 国产成人亚洲综合a∨婷婷图片| 欧美黄在线观看| 美日韩精品视频| 2020国产精品| 亚洲va欧美va人人爽| 不卡一卡二卡三乱码免费网站| 在线日韩中文| 久久久久成人精品免费播放动漫| www.av精品| 人人超碰91尤物精品国产| 国产精品国产三级国产| 欧美国产乱子伦| 日韩精品午夜视频| 欧美日韩91| 欧美情侣在线播放| 亚洲黄色片在线观看| 国内一区二区视频| 在线观看成人av| 欧美吻胸吃奶大尺度电影| 欧美国产精品专区| 国产麻豆一精品一av一免费 | 亚洲黄色性网站| 国产成人av一区| 国产精品久久久免费| 日韩欧美亚洲国产另类| 丝袜美腿成人在线| 国内精品视频在线播放| 日韩一区二区免费在线观看| 亚洲一区免费在线观看| 你懂的一区二区| 在线不卡免费欧美| 亚洲综合精品自拍| 亚洲婷婷免费| 欧美精品一区二区三区在线播放| 日本vs亚洲vs韩国一区三区| 亚洲一级一区| 国产区在线观看成人精品| 国产精品资源在线看| 日本乱码高清不卡字幕| 亚洲综合图片区| 亚洲视频观看| 国产亚洲欧洲997久久综合 | 国产亚洲成av人在线观看导航| 国产伦精品一区二区三区免费| 另类亚洲自拍| 亚洲在线视频免费观看| 欧美日本精品| 欧美电影免费观看高清完整版在线观看 | 91在线无精精品入口| 91.xcao| 免费精品视频最新在线| 香蕉久久国产| 亚洲免费毛片网站| 欧美日韩91| 国产精品欧美一级免费| 色综合天天综合网国产成人综合天| 555www色欧美视频| 国内精品久久久久影院薰衣草| 欧美在线一二三四区| 日本不卡在线视频| 久久久精品动漫| 午夜精品福利一区二区三区av| 亚洲欧美日韩视频二区| 亚洲午夜精品17c| 亚洲欧美日本日韩| 亚洲永久精品大片| 亚洲欧美日韩国产| 亚洲午夜久久久久中文字幕久| av成人激情| 亚洲最大成人综合| 国产一区白浆| 午夜精品一区二区三区电影天堂| 久久aⅴ乱码一区二区三区| 亚洲chinese男男1069| 国产乱码精品一区二区三区不卡| 一区二区三区高清不卡| 国产精品一卡| 亚洲成人免费在线| 久久国产精品亚洲va麻豆| 手机精品视频在线观看| 久久夜色精品| 轻轻草成人在线| 欧美男人的天堂一二区| 国产精品一级黄| 精品精品国产高清a毛片牛牛| av一区二区三区| 国产精品毛片高清在线完整版| 日韩视频一区| 日韩国产欧美视频| 欧美色综合网站| 成人性生交大片| 欧美国产一区二区| 亚洲国产精选| 午夜在线电影亚洲一区| 欧美日韩日本视频| 成人av资源在线| 国产精品激情偷乱一区二区∴| 国产视频一区免费看| 日韩av中文字幕一区二区三区| 欧美人与禽zozo性伦| bt欧美亚洲午夜电影天堂| 国产精品久久久久久久久动漫| 国产伦精品一区| 国内一区二区视频| 欧美精彩视频一区二区三区|