日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

如何利用vue實(shí)現(xiàn)波譜擬合詳解

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

主頁面-功能介紹

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

如何利用vue實(shí)現(xiàn)波譜擬合詳解

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

再來一張圖:

如何利用vue實(shí)現(xiàn)波譜擬合詳解

每種成分?jǐn)?shù)量和參數(shù)、每種成分內(nèi)每種原子核數(shù)量和參數(shù)設(shè)置好后,對數(shù)據(jù)進(jìn)行處理,由三種結(jié)果,卷積、積分、二重積分,那就來看看數(shù)據(jù)的處理邏輯吧~

如何利用vue實(shí)現(xiàn)波譜擬合詳解

從數(shù)據(jù)流角度,主要進(jìn)行三步處理:數(shù)據(jù)->數(shù)據(jù)裂變->光譜計(jì)算->繪圖,左邊是算法實(shí)現(xiàn)所需的參數(shù)、右邊是對數(shù)據(jù)及每個(gè)步驟的描述。

代碼實(shí)現(xiàn)

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

組件的動(dòng)態(tài)渲染用了一個(gè)比較巧妙的辦法,一開始我打算用render來寫,后來從部門大神那里學(xué)到通過遍歷列表進(jìn)行渲染,腦子之間還是有差距的。。。

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

同理原子核的動(dòng)態(tài)渲染也是這么實(shí)現(xiàn)的:

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

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

各參數(shù)的綁定:component中參數(shù)均使用一維數(shù)組,chenge事件需傳遞一維數(shù)組的下標(biāo),component內(nèi)的nucleui均使用二維數(shù)組,change事件需傳遞二維數(shù)組的下標(biāo)。

以上介紹參數(shù)定義,接下來是數(shù)據(jù)處理:

// 首先計(jì)算裂變數(shù)據(jù)stickspectrum (w) { // console.log(’組件信息’, w) const stick = new Array(2) // 返回包含stick[0]的stick光譜數(shù)組,stick[1]是位置 stick[0] = new Array()// 光譜強(qiáng)度 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) //分裂后的光譜數(shù)據(jù)長度 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 },

// 再對裂變后的數(shù)據(jù)進(jìn)行光譜計(jì)算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)// 第一種光譜繪圖位置數(shù)據(jù) 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) // 用來保存每個(gè)分量的積分 const tmpdoubleint = new Array(this.No_integers) // 用來保存每個(gè)分量的二重積分 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)) // 其他情況下的正常計(jì)算,高斯+洛倫茲 } 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)) // 高斯+洛倫茲積分-明確計(jì)算以避免積分誤差 } } 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) // 有多少積分高于理論(只發(fā)生在非常尖銳的線) for (let j = 1; j < this.No_integers; j++) { this.XYdoubleint[0][j][1] += mm > 1 ? tmpdoubleint[j] / mm : tmpdoubleint[j] // 第三種頻譜數(shù)據(jù) 如果二重積分高于理論,將其標(biāo)準(zhǔn)化 this.XYint[0][j][1] += tmpint[j] // 第二種頻譜數(shù)據(jù) } } // console.log(’XYint’, this.XYint[0]) },

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

到此這篇關(guān)于如何利用vue實(shí)現(xiàn)波譜擬合的文章就介紹到這了,更多相關(guān)vue實(shí)現(xiàn)波譜擬合內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久狠狠婷婷| 日韩国产欧美三级| 美女在线视频一区| 国产精品1luya在线播放| 国产精品大片免费观看| 国产精品115| 福利一区二区三区视频在线观看| 日韩av有码| 婷婷综合在线| 亚洲精品123区| 午夜电影一区| 欧美日本不卡高清| 四季av一区二区凹凸精品| 久久一区二区三区喷水| 国产精品普通话对白| 日韩在线观看中文字幕| 国产精品天堂蜜av在线播放| 黑森林国产精品av| 午夜久久久久| 日韩国产高清在线| 另类欧美日韩国产在线| 91精品韩国| 美女精品网站| 久久精品国产福利| 久久人人88| 综合激情视频| 色婷婷色综合| 免费在线观看成人| 精品国产黄a∨片高清在线| 欧美日韩在线播放视频| 69堂免费精品视频在线播放| 日韩一区二区中文| 亚洲三级观看| 日韩成人精品一区二区| 国产一级一区二区| 嫩草伊人久久精品少妇av杨幂| 天堂中文在线播放| 一区二区三区四区精品视频| 久久字幕精品一区| 激情欧美日韩一区| 国产日韩亚洲| 欧美日韩国产免费观看 | 亚洲精品在线a| 激情国产在线| 欧美综合精品| 亚洲一区二区动漫| 中文av在线全新| 日本va欧美va精品发布| 国产一区二区三区自拍| 久久wwww| 久久亚洲视频| 久久精品卡一| 麻豆中文一区二区| 香蕉久久夜色精品国产| 成人影视亚洲图片在线| 亚洲免费福利一区| 超级白嫩亚洲国产第一| 亚洲精品欧美| 国产一区二区中文| 精品一区二区三区中文字幕视频| 欧美日韩视频一区二区三区| 日产午夜精品一线二线三线| 日韩国产欧美在线播放| 伊人影院久久| 伊人网在线播放| 欧美国产极品| 日韩不卡在线观看日韩不卡视频 | 亚洲精品成人一区| 亚洲二区视频| 欧美精品高清| 九九久久国产| 国产麻豆精品| 日韩中文字幕在线一区| 国产偷自视频区视频一区二区| 欧美日韩视频网站| 国产在线一区不卡| 麻豆国产一区| 久久av网站| 国产精品黄网站| 国产欧美午夜| 91精品麻豆| 69堂精品视频在线播放| 五月激激激综合网色播| 亚洲欧美网站在线观看| 日韩精品一级二级 | 国产精品115| 欧美日韩va| 久久精品av麻豆的观看方式| 日韩一区二区三免费高清在线观看 | 香蕉视频亚洲一级| 国产va免费精品观看精品视频| 91免费精品国偷自产在线在线| 亚洲九九精品| 日本欧美一区二区| 日韩精品三级| 欧美欧美黄在线二区| 国产日韩一区二区三区在线| 国产无遮挡裸体免费久久| 国产欧美三级| 九九99久久精品在免费线bt| 欧美国产小视频| 日本高清不卡一区二区三区视频| 桃色av一区二区| 欧美日韩一二三四| 亚洲精品小说| 亚洲专区视频| 欧美视频久久| 国产一区二区三区视频在线| 日韩精品dvd| 欧美~级网站不卡| 午夜一级久久| 日韩av不卡一区二区| 国产精品对白| 亚洲人成在线网站| 午夜日韩av| 日韩精品视频在线看| 国产精品草草| 国产成人精品亚洲日本在线观看| 欧美亚洲国产激情| 亚洲一区国产一区| 日韩黄色免费网站| 国内在线观看一区二区三区| 久久久久99| 玖玖精品视频| 国产欧美亚洲一区| 高清不卡亚洲| 国产精品三上| 欧美国产亚洲精品| 婷婷成人在线| 青青草精品视频| 天堂av在线| 亚洲一区二区三区在线免费| 国产精品美女在线观看直播| 播放一区二区| 中文字幕一区二区精品区| 久久国产精品色av免费看| 欧美国产偷国产精品三区| 在线视频亚洲| 国产精品久久久网站| 播放一区二区| 日本午夜精品| 99久久九九| 国产亚洲欧美日韩精品一区二区三区 | 超碰99在线| 一区二区电影在线观看| 国产欧美日韩在线观看视频| 精品日韩视频| 天海翼亚洲一区二区三区| 成人国产精品一区二区网站| 亚洲一区二区三区高清| 免费一级欧美在线观看视频 | 国产经典一区| 91久久午夜| 欧美极品中文字幕| 日韩亚洲精品在线| 久久精品亚洲| 亚洲精品四区| 五月综合激情| 欧美xxxx性| 中文字幕一区二区三区在线视频| 国产91在线播放精品| 日韩网站在线| 日韩综合在线| 久久狠狠久久| 日韩精品一二三四| 欧美xxxx中国| 青青草伊人久久| 美日韩精品视频| 久久精品动漫| 久久精品一区二区国产| 午夜精品影视国产一区在线麻豆| 999国产精品视频| 麻豆精品少妇| 日本在线成人| 国产精品毛片| 亚洲国产专区校园欧美| 精品网站999| 日韩av中文字幕一区二区三区| 欧美女激情福利| 香蕉视频亚洲一级| 国产精品成人一区二区网站软件| 亚洲一级大片| 麻豆91精品| 国产精品试看| 午夜国产欧美理论在线播放 | 久久不见久久见中文字幕免费| 亚洲精品综合| 亚洲一区国产| 99热精品在线| 免费久久久久久久久| 日韩精品电影| 国产精品久久久久久久久久10秀| 日本欧美大码aⅴ在线播放| 丝瓜av网站精品一区二区| 亚洲天堂成人| 婷婷精品视频| 午夜欧美精品久久久久久久| 精品一区三区| 日韩国产网站| 91精品在线观看国产|