UNPKG

wsemi

Version:

A support package for web developer.

793 lines (707 loc) 48.9 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>interp1.mjs - Documentation</title> <script src="scripts/prettify/prettify.js"></script> <script src="scripts/prettify/lang-css.js"></script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc.css"> <script src="scripts/nav.js" defer></script> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <input type="checkbox" id="nav-trigger" class="nav-trigger" /> <label for="nav-trigger" class="navicon-button x"> <div class="navicon"></div> </label> <label for="nav-trigger" class="overlay"></label> <nav > <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="wsemi.html">wsemi</a><ul class='methods'><li data-type='method'><a href="wsemi.html#.ab2blob">ab2blob</a></li><li data-type='method'><a href="wsemi.html#.ab2u8arr">ab2u8arr</a></li><li data-type='method'><a href="wsemi.html#.addExcelWorksheetFromData">addExcelWorksheetFromData</a></li><li data-type='method'><a href="wsemi.html#.addMonth">addMonth</a></li><li data-type='method'><a href="wsemi.html#.aes2str">aes2str</a></li><li data-type='method'><a href="wsemi.html#.alive">alive</a></li><li data-type='method'><a href="wsemi.html#.arr2dt">arr2dt</a></li><li data-type='method'><a href="wsemi.html#.arrAccum">arrAccum</a></li><li data-type='method'><a href="wsemi.html#.arrAdd">arrAdd</a></li><li data-type='method'><a href="wsemi.html#.arrAt">arrAt</a></li><li data-type='method'><a href="wsemi.html#.arrDiff">arrDiff</a></li><li data-type='method'><a href="wsemi.html#.arrFilterByKeywords">arrFilterByKeywords</a></li><li data-type='method'><a href="wsemi.html#.arrFilterByNum">arrFilterByNum</a></li><li data-type='method'><a href="wsemi.html#.arrFilterByPnum">arrFilterByPnum</a></li><li data-type='method'><a href="wsemi.html#.arrFilterByPnumAndToLog">arrFilterByPnumAndToLog</a></li><li data-type='method'><a href="wsemi.html#.arrFind">arrFind</a></li><li data-type='method'><a href="wsemi.html#.arrGroupByMaxmin">arrGroupByMaxmin</a></li><li data-type='method'><a href="wsemi.html#.arrHas">arrHas</a></li><li data-type='method'><a href="wsemi.html#.arrInsert">arrInsert</a></li><li data-type='method'><a href="wsemi.html#.arrLookupByMaxmin">arrLookupByMaxmin</a></li><li data-type='method'><a href="wsemi.html#.arrMax">arrMax</a></li><li data-type='method'><a href="wsemi.html#.arrMin">arrMin</a></li><li data-type='method'><a href="wsemi.html#.arrMulti">arrMulti</a></li><li data-type='method'><a href="wsemi.html#.arrNorm">arrNorm</a></li><li data-type='method'><a href="wsemi.html#.arrProduct">arrProduct</a></li><li data-type='method'><a href="wsemi.html#.arrReduce">arrReduce</a></li><li data-type='method'><a href="wsemi.html#.arrSep">arrSep</a></li><li data-type='method'><a href="wsemi.html#.arrSort">arrSort</a></li><li data-type='method'><a href="wsemi.html#.asind">asind</a></li><li data-type='method'><a href="wsemi.html#.atan2d">atan2d</a></li><li data-type='method'><a href="wsemi.html#.atand">atand</a></li><li data-type='method'><a href="wsemi.html#.attstr">attstr</a></li><li data-type='method'><a href="wsemi.html#.b642obj">b642obj</a></li><li data-type='method'><a href="wsemi.html#.b642str">b642str</a></li><li data-type='method'><a href="wsemi.html#.b642u16arr">b642u16arr</a></li><li data-type='method'><a href="wsemi.html#.b642u8arr">b642u8arr</a></li><li data-type='method'><a href="wsemi.html#.binstr">binstr</a></li><li data-type='method'><a href="wsemi.html#.blob2ab">blob2ab</a></li><li data-type='method'><a href="wsemi.html#.blob2b64">blob2b64</a></li><li data-type='method'><a href="wsemi.html#.blob2str">blob2str</a></li><li data-type='method'><a href="wsemi.html#.blob2u8arr">blob2u8arr</a></li><li data-type='method'><a href="wsemi.html#.blobs2b64s">blobs2b64s</a></li><li data-type='method'><a href="wsemi.html#.blobs2u8arrs">blobs2u8arrs</a></li><li data-type='method'><a href="wsemi.html#.bodyLog">bodyLog</a></li><li data-type='method'><a href="wsemi.html#.browserView">browserView</a></li><li data-type='method'><a href="wsemi.html#.browserViewFromBlob">browserViewFromBlob</a></li><li data-type='method'><a href="wsemi.html#.browserViewFromText">browserViewFromText</a></li><li data-type='method'><a href="wsemi.html#.browserViewFromU8arr">browserViewFromU8arr</a></li><li data-type='method'><a href="wsemi.html#.bs2u8arr">bs2u8arr</a></li><li data-type='method'><a href="wsemi.html#.bufRead">bufRead</a></li><li data-type='method'><a href="wsemi.html#.bufReadDbl">bufReadDbl</a></li><li data-type='method'><a href="wsemi.html#.bufWrite">bufWrite</a></li><li data-type='method'><a href="wsemi.html#.bufWriteDbl">bufWriteDbl</a></li><li data-type='method'><a href="wsemi.html#.cache">cache</a></li><li data-type='method'><a href="wsemi.html#.cbol">cbol</a></li><li data-type='method'><a href="wsemi.html#.cdbl">cdbl</a></li><li data-type='method'><a href="wsemi.html#.cfilesize">cfilesize</a></li><li data-type='method'><a href="wsemi.html#.cfinancial">cfinancial</a></li><li data-type='method'><a href="wsemi.html#.cint">cint</a></li><li data-type='method'><a href="wsemi.html#.clearXSS">clearXSS</a></li><li data-type='method'><a href="wsemi.html#.color">color</a></li><li data-type='method'><a href="wsemi.html#.composeToTree">composeToTree</a></li><li data-type='method'><a href="wsemi.html#.convertToTree">convertToTree</a></li><li data-type='method'><a href="wsemi.html#.copyStrToClipboard">copyStrToClipboard</a></li><li data-type='method'><a href="wsemi.html#.cosd">cosd</a></li><li data-type='method'><a href="wsemi.html#.cotd">cotd</a></li><li data-type='method'><a href="wsemi.html#.createExcelWorkbook">createExcelWorkbook</a></li><li data-type='method'><a href="wsemi.html#.cscd">cscd</a></li><li data-type='method'><a href="wsemi.html#.cstr">cstr</a></li><li data-type='method'><a href="wsemi.html#.day2cht">day2cht</a></li><li data-type='method'><a href="wsemi.html#.debounce">debounce</a></li><li data-type='method'><a href="wsemi.html#.delay">delay</a></li><li data-type='method'><a href="wsemi.html#.dig">dig</a></li><li data-type='method'><a href="wsemi.html#.digExp">digExp</a></li><li data-type='method'><a href="wsemi.html#.domAlert">domAlert</a></li><li data-type='method'><a href="wsemi.html#.domAppend">domAppend</a></li><li data-type='method'><a href="wsemi.html#.domCancelEvent">domCancelEvent</a></li><li data-type='method'><a href="wsemi.html#.domCompareText">domCompareText</a></li><li data-type='method'><a href="wsemi.html#.domCompareTextDyn">domCompareTextDyn</a></li><li data-type='method'><a href="wsemi.html#.domConvertToPic">domConvertToPic</a></li><li data-type='method'><a href="wsemi.html#.domConvertToPicDyn">domConvertToPicDyn</a></li><li data-type='method'><a href="wsemi.html#.domDetect">domDetect</a></li><li data-type='method'><a href="wsemi.html#.domDrag">domDrag</a></li><li data-type='method'><a href="wsemi.html#.domDragBarAndScroll">domDragBarAndScroll</a></li><li data-type='method'><a href="wsemi.html#.domDragPreview">domDragPreview</a></li><li data-type='method'><a href="wsemi.html#.domDropFiles">domDropFiles</a></li><li data-type='method'><a href="wsemi.html#.domElementsFromPoint">domElementsFromPoint</a></li><li data-type='method'><a href="wsemi.html#.domFadeIn">domFadeIn</a></li><li data-type='method'><a href="wsemi.html#.domFadeOut">domFadeOut</a></li><li data-type='method'><a href="wsemi.html#.domFind">domFind</a></li><li data-type='method'><a href="wsemi.html#.domFinds">domFinds</a></li><li data-type='method'><a href="wsemi.html#.domGetAttr">domGetAttr</a></li><li data-type='method'><a href="wsemi.html#.domGetBoudRect">domGetBoudRect</a></li><li data-type='method'><a href="wsemi.html#.domGetBoudRectRefSelf">domGetBoudRectRefSelf</a></li><li data-type='method'><a href="wsemi.html#.domGetFileAccept">domGetFileAccept</a></li><li data-type='method'><a href="wsemi.html#.domGetFiles">domGetFiles</a></li><li data-type='method'><a href="wsemi.html#.domGetParents">domGetParents</a></li><li data-type='method'><a href="wsemi.html#.domGetPointFromEvent">domGetPointFromEvent</a></li><li data-type='method'><a href="wsemi.html#.domGetScrollableParent">domGetScrollableParent</a></li><li data-type='method'><a href="wsemi.html#.domGetWindowSize">domGetWindowSize</a></li><li data-type='method'><a href="wsemi.html#.domIsClientXYIn">domIsClientXYIn</a></li><li data-type='method'><a href="wsemi.html#.domIsFocused">domIsFocused</a></li><li data-type='method'><a href="wsemi.html#.domIsVisible">domIsVisible</a></li><li data-type='method'><a href="wsemi.html#.domPrepend">domPrepend</a></li><li data-type='method'><a href="wsemi.html#.domRemove">domRemove</a></li><li data-type='method'><a href="wsemi.html#.domRenderMarkdownMind">domRenderMarkdownMind</a></li><li data-type='method'><a href="wsemi.html#.domRenderMarkdownMindDyn">domRenderMarkdownMindDyn</a></li><li data-type='method'><a href="wsemi.html#.domRipple">domRipple</a></li><li data-type='method'><a href="wsemi.html#.domScrollIntoView">domScrollIntoView</a></li><li data-type='method'><a href="wsemi.html#.domScrollTo">domScrollTo</a></li><li data-type='method'><a href="wsemi.html#.domShowImages">domShowImages</a></li><li data-type='method'><a href="wsemi.html#.domShowImagesDyn">domShowImagesDyn</a></li><li data-type='method'><a href="wsemi.html#.domShowInputAndGetFiles">domShowInputAndGetFiles</a></li><li data-type='method'><a href="wsemi.html#.domShowInputAndGetFilesU8Arrs">domShowInputAndGetFilesU8Arrs</a></li><li data-type='method'><a href="wsemi.html#.domTooltip">domTooltip</a></li><li data-type='method'><a href="wsemi.html#.domTriggerEvent">domTriggerEvent</a></li><li data-type='method'><a href="wsemi.html#.domVirtualCreate">domVirtualCreate</a></li><li data-type='method'><a href="wsemi.html#.domVirtualCreateQueue">domVirtualCreateQueue</a></li><li data-type='method'><a href="wsemi.html#.downloadExcelFileFromData">downloadExcelFileFromData</a></li><li data-type='method'><a href="wsemi.html#.downloadExcelFileFromDataDyn">downloadExcelFileFromDataDyn</a></li><li data-type='method'><a href="wsemi.html#.downloadFileFromB64">downloadFileFromB64</a></li><li data-type='method'><a href="wsemi.html#.downloadFileFromBlob">downloadFileFromBlob</a></li><li data-type='method'><a href="wsemi.html#.downloadFileFromText">downloadFileFromText</a></li><li data-type='method'><a href="wsemi.html#.downloadFileFromU8Arr">downloadFileFromU8Arr</a></li><li data-type='method'><a href="wsemi.html#.dtmapping">dtmapping</a></li><li data-type='method'><a href="wsemi.html#.dtpick">dtpick</a></li><li data-type='method'><a href="wsemi.html#.evem">evem</a></li><li data-type='method'><a href="wsemi.html#.execProcess">execProcess</a></li><li data-type='method'><a href="wsemi.html#.execScript">execScript</a></li><li data-type='method'><a href="wsemi.html#.f2c">f2c</a></li><li data-type='method'><a href="wsemi.html#.filepathToTree">filepathToTree</a></li><li data-type='method'><a href="wsemi.html#.files2data">files2data</a></li><li data-type='method'><a href="wsemi.html#.flattenToConn">flattenToConn</a></li><li data-type='method'><a href="wsemi.html#.flattenTree">flattenTree</a></li><li data-type='method'><a href="wsemi.html#.fsCleanFolder">fsCleanFolder</a></li><li data-type='method'><a href="wsemi.html#.fsCopyFolder">fsCopyFolder</a></li><li data-type='method'><a href="wsemi.html#.fsCreateFile">fsCreateFile</a></li><li data-type='method'><a href="wsemi.html#.fsCreateFolder">fsCreateFolder</a></li><li data-type='method'><a href="wsemi.html#.fsDeleteFile">fsDeleteFile</a></li><li data-type='method'><a href="wsemi.html#.fsDeleteFolder">fsDeleteFolder</a></li><li data-type='method'><a href="wsemi.html#.fsEvem">fsEvem</a></li><li data-type='method'><a href="wsemi.html#.fsGetFilesInFolder">fsGetFilesInFolder</a></li><li data-type='method'><a href="wsemi.html#.fsGetFoldersInFolder">fsGetFoldersInFolder</a></li><li data-type='method'><a href="wsemi.html#.fsIsFile">fsIsFile</a></li><li data-type='method'><a href="wsemi.html#.fsIsFolder">fsIsFolder</a></li><li data-type='method'><a href="wsemi.html#.fsReadText">fsReadText</a></li><li data-type='method'><a href="wsemi.html#.fsRenameFile">fsRenameFile</a></li><li data-type='method'><a href="wsemi.html#.fsRenameFolder">fsRenameFolder</a></li><li data-type='method'><a href="wsemi.html#.fsTreeFolder">fsTreeFolder</a></li><li data-type='method'><a href="wsemi.html#.fsWatchFile">fsWatchFile</a></li><li data-type='method'><a href="wsemi.html#.fsWriteText">fsWriteText</a></li><li data-type='method'><a href="wsemi.html#.genGradientColor">genGradientColor</a></li><li data-type='method'><a href="wsemi.html#.genID">genID</a></li><li data-type='method'><a href="wsemi.html#.genPm">genPm</a></li><li data-type='method'><a href="wsemi.html#.getBufferSize">getBufferSize</a></li><li data-type='method'><a href="wsemi.html#.getClearPathName">getClearPathName</a></li><li data-type='method'><a href="wsemi.html#.getCsvStrFromData">getCsvStrFromData</a></li><li data-type='method'><a href="wsemi.html#.getDataFromExcelFileU8Arr">getDataFromExcelFileU8Arr</a></li><li data-type='method'><a href="wsemi.html#.getDataFromExcelFileU8ArrDyn">getDataFromExcelFileU8ArrDyn</a></li><li data-type='method'><a href="wsemi.html#.getDirName">getDirName</a></li><li data-type='method'><a href="wsemi.html#.getEnv">getEnv</a></li><li data-type='method'><a href="wsemi.html#.getExcelU8ArrFromData">getExcelU8ArrFromData</a></li><li data-type='method'><a href="wsemi.html#.getExcelU8ArrFromWorkbook">getExcelU8ArrFromWorkbook</a></li><li data-type='method'><a href="wsemi.html#.getExcelWorkbookFromData">getExcelWorkbookFromData</a></li><li data-type='method'><a href="wsemi.html#.getExcelWorkbookFromWorksheet">getExcelWorkbookFromWorksheet</a></li><li data-type='method'><a href="wsemi.html#.getExcelWorksheetFromData">getExcelWorksheetFromData</a></li><li data-type='method'><a href="wsemi.html#.getFileAccept">getFileAccept</a></li><li data-type='method'><a href="wsemi.html#.getFileName">getFileName</a></li><li data-type='method'><a href="wsemi.html#.getFileTrueName">getFileTrueName</a></li><li data-type='method'><a href="wsemi.html#.getGlobal">getGlobal</a></li><li data-type='method'><a href="wsemi.html#.getObjSize">getObjSize</a></li><li data-type='method'><a href="wsemi.html#.getTimeBetween">getTimeBetween</a></li><li data-type='method'><a href="wsemi.html#.getTimeFromUnit">getTimeFromUnit</a></li><li data-type='method'><a href="wsemi.html#.getTimeObject">getTimeObject</a></li><li data-type='method'><a href="wsemi.html#.getTimeRange">getTimeRange</a></li><li data-type='method'><a href="wsemi.html#.getUserAgent">getUserAgent</a></li><li data-type='method'><a href="wsemi.html#.getUserAgentDyn">getUserAgentDyn</a></li><li data-type='method'><a href="wsemi.html#.getltdtkeys">getltdtkeys</a></li><li data-type='method'><a href="wsemi.html#.haskey">haskey</a></li><li data-type='method'><a href="wsemi.html#.html2pic">html2pic</a></li><li data-type='method'><a href="wsemi.html#.html2picDyn">html2picDyn</a></li><li data-type='method'><a href="wsemi.html#.html2str">html2str</a></li><li data-type='method'><a href="wsemi.html#.html2strDyn">html2strDyn</a></li><li data-type='method'><a href="wsemi.html#.htmlDecode">htmlDecode</a></li><li data-type='method'><a href="wsemi.html#.htmlEncode">htmlEncode</a></li><li data-type='method'><a href="wsemi.html#.importResources">importResources</a></li><li data-type='method'><a href="wsemi.html#.interp1">interp1</a></li><li data-type='method'><a href="wsemi.html#.isDev">isDev</a></li><li data-type='method'><a href="wsemi.html#.isEle">isEle</a></li><li data-type='method'><a href="wsemi.html#.isEleExistByID">isEleExistByID</a></li><li data-type='method'><a href="wsemi.html#.isEmail">isEmail</a></li><li data-type='method'><a href="wsemi.html#.isIE">isIE</a></li><li data-type='method'><a href="wsemi.html#.isNarrow">isNarrow</a></li><li data-type='method'><a href="wsemi.html#.isStrHasCapital">isStrHasCapital</a></li><li data-type='method'><a href="wsemi.html#.isStrHasLowerCase">isStrHasLowerCase</a></li><li data-type='method'><a href="wsemi.html#.isStrHasNumber">isStrHasNumber</a></li><li data-type='method'><a href="wsemi.html#.isUserIdentify">isUserIdentify</a></li><li data-type='method'><a href="wsemi.html#.isUserName">isUserName</a></li><li data-type='method'><a href="wsemi.html#.isUserPW">isUserPW</a></li><li data-type='method'><a href="wsemi.html#.isWindow">isWindow</a></li><li data-type='method'><a href="wsemi.html#.isab">isab</a></li><li data-type='method'><a href="wsemi.html#.isarr">isarr</a></li><li data-type='method'><a href="wsemi.html#.isarr0">isarr0</a></li><li data-type='method'><a href="wsemi.html#.isblob">isblob</a></li><li data-type='method'><a href="wsemi.html#.isbol">isbol</a></li><li data-type='method'><a href="wsemi.html#.isday">isday</a></li><li data-type='method'><a href="wsemi.html#.isearr">isearr</a></li><li data-type='method'><a href="wsemi.html#.iseobj">iseobj</a></li><li data-type='method'><a href="wsemi.html#.iser">iser</a></li><li data-type='method'><a href="wsemi.html#.isernot">isernot</a></li><li data-type='method'><a href="wsemi.html#.isestr">isestr</a></li><li data-type='method'><a href="wsemi.html#.isfun">isfun</a></li><li data-type='method'><a href="wsemi.html#.isint">isint</a></li><li data-type='method'><a href="wsemi.html#.ismonth">ismonth</a></li><li data-type='method'><a href="wsemi.html#.isn0int">isn0int</a></li><li data-type='method'><a href="wsemi.html#.isn0num">isn0num</a></li><li data-type='method'><a href="wsemi.html#.isnbr">isnbr</a></li><li data-type='method'><a href="wsemi.html#.isnint">isnint</a></li><li data-type='method'><a href="wsemi.html#.isnnum">isnnum</a></li><li data-type='method'><a href="wsemi.html#.isnull">isnull</a></li><li data-type='method'><a href="wsemi.html#.isnum">isnum</a></li><li data-type='method'><a href="wsemi.html#.isobj">isobj</a></li><li data-type='method'><a href="wsemi.html#.isobj0">isobj0</a></li><li data-type='method'><a href="wsemi.html#.isp0int">isp0int</a></li><li data-type='method'><a href="wsemi.html#.isp0num">isp0num</a></li><li data-type='method'><a href="wsemi.html#.ispint">ispint</a></li><li data-type='method'><a href="wsemi.html#.ispm">ispm</a></li><li data-type='method'><a href="wsemi.html#.ispnum">ispnum</a></li><li data-type='method'><a href="wsemi.html#.isstr">isstr</a></li><li data-type='method'><a href="wsemi.html#.isstr0">isstr0</a></li><li data-type='method'><a href="wsemi.html#.istime">istime</a></li><li data-type='method'><a href="wsemi.html#.istimeTZ">istimeTZ</a></li><li data-type='method'><a href="wsemi.html#.istimems">istimems</a></li><li data-type='method'><a href="wsemi.html#.istimemsTZ">istimemsTZ</a></li><li data-type='method'><a href="wsemi.html#.isu16arr">isu16arr</a></li><li data-type='method'><a href="wsemi.html#.isu8arr">isu8arr</a></li><li data-type='method'><a href="wsemi.html#.isundefined">isundefined</a></li><li data-type='method'><a href="wsemi.html#.j2o">j2o</a></li><li data-type='method'><a href="wsemi.html#.keysmat2ltdt">keysmat2ltdt</a></li><li data-type='method'><a href="wsemi.html#.log">log</a></li><li data-type='method'><a href="wsemi.html#.ltdt2vrtsable">ltdt2vrtsable</a></li><li data-type='method'><a href="wsemi.html#.ltdtDiff">ltdtDiff</a></li><li data-type='method'><a href="wsemi.html#.ltdtDiffByKey">ltdtDiffByKey</a></li><li data-type='method'><a href="wsemi.html#.ltdtkeys2mat">ltdtkeys2mat</a></li><li data-type='method'><a href="wsemi.html#.ltdtkeysheads2mat">ltdtkeysheads2mat</a></li><li data-type='method'><a href="wsemi.html#.ltdtmapping">ltdtmapping</a></li><li data-type='method'><a href="wsemi.html#.ltdtmerge">ltdtmerge</a></li><li data-type='method'><a href="wsemi.html#.ltdtpick">ltdtpick</a></li><li data-type='method'><a href="wsemi.html#.ltdtpull">ltdtpull</a></li><li data-type='method'><a href="wsemi.html#.mat2ltdt">mat2ltdt</a></li><li data-type='method'><a href="wsemi.html#.matConcat">matConcat</a></li><li data-type='method'><a href="wsemi.html#.matDiff">matDiff</a></li><li data-type='method'><a href="wsemi.html#.matat">matat</a></li><li data-type='method'><a href="wsemi.html#.now2str">now2str</a></li><li data-type='method'><a href="wsemi.html#.now2strp">now2strp</a></li><li data-type='method'><a href="wsemi.html#.nowDay2str">nowDay2str</a></li><li data-type='method'><a href="wsemi.html#.nowms2str">nowms2str</a></li><li data-type='method'><a href="wsemi.html#.nowms2strp">nowms2strp</a></li><li data-type='method'><a href="wsemi.html#.o2j">o2j</a></li><li data-type='method'><a href="wsemi.html#.obj2b64">obj2b64</a></li><li data-type='method'><a href="wsemi.html#.obj2pb64">obj2pb64</a></li><li data-type='method'><a href="wsemi.html#.obj2str">obj2str</a></li><li data-type='method'><a href="wsemi.html#.obj2stru8arr">obj2stru8arr</a></li><li data-type='method'><a href="wsemi.html#.obj2u8arr">obj2u8arr</a></li><li data-type='method'><a href="wsemi.html#.objSortBy">objSortBy</a></li><li data-type='method'><a href="wsemi.html#.objSortByKeys">objSortByKeys</a></li><li data-type='method'><a href="wsemi.html#.ocr">ocr</a></li><li data-type='method'><a href="wsemi.html#.ocrDyn">ocrDyn</a></li><li data-type='method'><a href="wsemi.html#.oo">oo</a></li><li data-type='method'><a href="wsemi.html#.openLink">openLink</a></li><li data-type='method'><a href="wsemi.html#.pb642obj">pb642obj</a></li><li data-type='method'><a href="wsemi.html#.pmChain">pmChain</a></li><li data-type='method'><a href="wsemi.html#.pmConvertResolve">pmConvertResolve</a></li><li data-type='method'><a href="wsemi.html#.pmHook">pmHook</a></li><li data-type='method'><a href="wsemi.html#.pmHookReject">pmHookReject</a></li><li data-type='method'><a href="wsemi.html#.pmIni">pmIni</a></li><li data-type='method'><a href="wsemi.html#.pmInvResolve">pmInvResolve</a></li><li data-type='method'><a href="wsemi.html#.pmMap">pmMap</a></li><li data-type='method'><a href="wsemi.html#.pmQueue">pmQueue</a></li><li data-type='method'><a href="wsemi.html#.pmSeries">pmSeries</a></li><li data-type='method'><a href="wsemi.html#.pmThrottle">pmThrottle</a></li><li data-type='method'><a href="wsemi.html#.pseudoRandom">pseudoRandom</a></li><li data-type='method'><a href="wsemi.html#.pseudoRandomIntRange">pseudoRandomIntRange</a></li><li data-type='method'><a href="wsemi.html#.pseudoRandomRange">pseudoRandomRange</a></li><li data-type='method'><a href="wsemi.html#.queue">queue</a></li><li data-type='method'><a href="wsemi.html#.rang">rang</a></li><li data-type='method'><a href="wsemi.html#.rep">rep</a></li><li data-type='method'><a href="wsemi.html#.repObj">repObj</a></li><li data-type='method'><a href="wsemi.html#.replace">replace</a></li><li data-type='method'><a href="wsemi.html#.replaceObj">replaceObj</a></li><li data-type='method'><a href="wsemi.html#.replacePlus">replacePlus</a></li><li data-type='method'><a href="wsemi.html#.round">round</a></li><li data-type='method'><a href="wsemi.html#.secd">secd</a></li><li data-type='method'><a href="wsemi.html#.sep">sep</a></li><li data-type='method'><a href="wsemi.html#.sepInt">sepInt</a></li><li data-type='method'><a href="wsemi.html#.sind">sind</a></li><li data-type='method'><a href="wsemi.html#.split">split</a></li><li data-type='method'><a href="wsemi.html#.str2aes">str2aes</a></li><li data-type='method'><a href="wsemi.html#.str2b64">str2b64</a></li><li data-type='method'><a href="wsemi.html#.str2hint">str2hint</a></li><li data-type='method'><a href="wsemi.html#.str2md5">str2md5</a></li><li data-type='method'><a href="wsemi.html#.str2obj">str2obj</a></li><li data-type='method'><a href="wsemi.html#.str2sha512">str2sha512</a></li><li data-type='method'><a href="wsemi.html#.str2u8arr">str2u8arr</a></li><li data-type='method'><a href="wsemi.html#.strCompare">strCompare</a></li><li data-type='method'><a href="wsemi.html#.strDiff">strDiff</a></li><li data-type='method'><a href="wsemi.html#.strFindFuzz">strFindFuzz</a></li><li data-type='method'><a href="wsemi.html#.strFindFuzzDyn">strFindFuzzDyn</a></li><li data-type='method'><a href="wsemi.html#.strFindSimilar">strFindSimilar</a></li><li data-type='method'><a href="wsemi.html#.strdelleft">strdelleft</a></li><li data-type='method'><a href="wsemi.html#.strdelright">strdelright</a></li><li data-type='method'><a href="wsemi.html#.strleft">strleft</a></li><li data-type='method'><a href="wsemi.html#.strmid">strmid</a></li><li data-type='method'><a href="wsemi.html#.strright">strright</a></li><li data-type='method'><a href="wsemi.html#.stru8arr2obj">stru8arr2obj</a></li><li data-type='method'><a href="wsemi.html#.tand">tand</a></li><li data-type='method'><a href="wsemi.html#.time2day">time2day</a></li><li data-type='method'><a href="wsemi.html#.time2hour">time2hour</a></li><li data-type='method'><a href="wsemi.html#.time2min">time2min</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2day">timeTZ2day</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2expire">timeTZ2expire</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2hour">timeTZ2hour</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2min">timeTZ2min</a></li><li data-type='method'><a href="wsemi.html#.timeTZ2past">timeTZ2past</a></li><li data-type='method'><a href="wsemi.html#.timems2day">timems2day</a></li><li data-type='method'><a href="wsemi.html#.timems2hour">timems2hour</a></li><li data-type='method'><a href="wsemi.html#.timems2min">timems2min</a></li><li data-type='method'><a href="wsemi.html#.timems2time">timems2time</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2day">timemsTZ2day</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2expire">timemsTZ2expire</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2hour">timemsTZ2hour</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2min">timemsTZ2min</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2past">timemsTZ2past</a></li><li data-type='method'><a href="wsemi.html#.timemsTZ2time">timemsTZ2time</a></li><li data-type='method'><a href="wsemi.html#.treeObj">treeObj</a></li><li data-type='method'><a href="wsemi.html#.treeToFilepath">treeToFilepath</a></li><li data-type='method'><a href="wsemi.html#.trim">trim</a></li><li data-type='method'><a href="wsemi.html#.u16arr2b64">u16arr2b64</a></li><li data-type='method'><a href="wsemi.html#.u16arr2u8arr">u16arr2u8arr</a></li><li data-type='method'><a href="wsemi.html#.u8arr2ab">u8arr2ab</a></li><li data-type='method'><a href="wsemi.html#.u8arr2b64">u8arr2b64</a></li><li data-type='method'><a href="wsemi.html#.u8arr2blob">u8arr2blob</a></li><li data-type='method'><a href="wsemi.html#.u8arr2bs">u8arr2bs</a></li><li data-type='method'><a href="wsemi.html#.u8arr2obj">u8arr2obj</a></li><li data-type='method'><a href="wsemi.html#.u8arr2str">u8arr2str</a></li><li data-type='method'><a href="wsemi.html#.u8arr2u16arr">u8arr2u16arr</a></li><li data-type='method'><a href="wsemi.html#.urlParse">urlParse</a></li><li data-type='method'><a href="wsemi.html#.verifyValue">verifyValue</a></li><li data-type='method'><a href="wsemi.html#.waitFun">waitFun</a></li></ul></li></ul> </nav> <div id="main"> <h1 class="page-title">interp1.mjs</h1> <section> <article> <pre class="prettyprint source linenums"><code>import size from 'lodash/size' import get from 'lodash/get' import each from 'lodash/each' import reverse from 'lodash/reverse' import toNumber from 'lodash/toNumber' import isNumber from 'lodash/isNumber' import isnum from './isnum.mjs' import isarr from './isarr.mjs' import isestr from './isestr.mjs' let inXRange = 'in x-range' let outOfXRange = 'out of x-range' let orderList = 'order list' let reverseOrderList = 'reverse order list' function toArrayXY(ps, opt = {}) { //若無數據回傳空陣列 if (size(ps) &lt;= 0) { return [] } //keyX let keyX = get(opt, 'keyX') if (!isestr(keyX)) { keyX = 'x' } //keyY let keyY = get(opt, 'keyY') if (!isestr(keyY)) { keyY = 'y' } //rs let rs = [] each(ps, (v) => { let x = null let y = null if (isarr(v) &amp;&amp; size(v) >= 2) { x = get(v, 0) y = get(v, 1) } else { x = get(v, keyX, null) y = get(v, keyY, null) } if (isnum(x) &amp;&amp; isnum(y)) { x = toNumber(x) y = toNumber(y) rs.push({ x, y, }) } }) return rs } function checkTrend(ps) { //check let bOrder = true let bReverseOrder = true for (let i = 1; i &lt; size(ps); i++) { let p0 = ps[i - 1] let p1 = ps[i] if (bOrder &amp;&amp; p0.x > p1.x) { //有遞減出現 bOrder = false } if (bReverseOrder &amp;&amp; p0.x &lt; p1.x) { //有遞增出現 bReverseOrder = false } if (p0.x === p1.x) { return { err: `x can not be equal: i=${i}, x=${p0.x}` } } } if (bOrder) { return orderList } if (bReverseOrder) { return reverseOrderList } return 'no' } function checkLimit(ps, x) { //xmin, xmax, 外部已確保x為遞增 let xmin = null let xmax = null xmin = ps[0].x xmax = ps[size(ps) - 1].x //lt, less than lower limit if (x &lt; xmin) { return { err: outOfXRange, msg: `x[${x}] less than lower limit[${xmin}]`, data: { ps, x, xmin, xmax, }, } } //gt, greater than upper limit if (x > xmax) { return { err: outOfXRange, msg: `x[${x}] greater than upper limit[${xmax}]`, data: { ps, x, xmin, xmax, }, } } return inXRange } function interp1Linear(ps, x) { //尋找x對應y值, 採各點之間線性內插 //checkLimit let cl = checkLimit(ps, x) if (cl !== inXRange) { return cl } //r let r = null for (let i = 1; i &lt; size(ps); i++) { let p0 = ps[i - 1] let p1 = ps[i] if (p0.x &lt;= x &amp;&amp; x &lt;= p1.x) { r = ((x - p0.x) * p1.y + (p1.x - x) * p0.y) / (p1.x - p0.x) break } } //check, 有檢核x是否超過上下限, 此處應該不會用到 if (r === null) { return { err: outOfXRange } } return r } function interp1Stairs(ps, x, opt = {}) { //每個點為bar中點, 尋找x所在之bar值(y) //xMin, 擴充最小x值範圍 let xMin = get(opt, 'xMin') if (isNumber(xMin)) { //外部已確保x為遞增 if (xMin > ps[0].x) { return { err: `xMin=${xMin} > ps[0].x=${ps[0].x}` } } else if (xMin === ps[0].x) { //不用擴充 } else { let p = { x: xMin, y: ps[0].y, //使用第一筆數據y } ps = [p, ...ps] //遞增數據得添加xMin於最前 } } //xMax, 擴充最大x值範圍 let xMax = get(opt, 'xMax') if (isNumber(xMax)) { //外部已確保x為遞增 if (xMax &lt; ps[size(ps) - 1].x) { return { err: `xMax=${xMax} &lt; ps[size(ps)-1].x=${ps[size(ps) - 1].x}` } } else if (xMax === ps[size(ps) - 1].x) { //不用擴充 } else { let p = { x: xMax, y: ps[size(ps) - 1].y, //使用最後一筆數據y } ps = [...ps, p] //遞增數據得添加xMax於最後 } } //checkLimit let cl = checkLimit(ps, x) if (cl !== inXRange) { return cl } //r let r = null for (let i = 0; i &lt; size(ps); i++) { let p0 = get(ps, i - 1, null) let p1 = get(ps, i, null) let p2 = get(ps, i + 1, null) let x0 = p1.x if (p0) { x0 = (p0.x + p1.x) / 2 //若有前者, 則取前者與自己x的平均值作為起點 } let x1 = p1.x if (p2) { x1 = (p2.x + p1.x) / 2 //若有後者, 則取後者與自己x的平均值作為終點 } if (x0 &lt;= x &amp;&amp; x &lt;= x1) { r = p1.y break } } //check, 有檢核x是否超過上下限, 此處應該不會用到 if (r === null) { return { err: outOfXRange } } return r } function interp1Blocks(ps, x) { //第1點為起點, 其餘各點為各bar終點, 尋找x所在之bar值(y) //checkLimit let cl = checkLimit(ps, x) if (cl !== inXRange) { return cl } //r let r = null for (let i = 1; i &lt; size(ps); i++) { let p0 = ps[i - 1] let p1 = ps[i] let x0 = p0.x let x1 = p1.x if (x0 &lt;= x &amp;&amp; x &lt;= x1) { r = p1.y break } } //check, 有檢核x是否超過上下限, 此處應該不會用到 if (r === null) { return { err: outOfXRange } } return r } /** * 一維數據內插 * * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/interp1.test.mjs Github} * @memberOf wsemi * @param {Array} ps 輸入一維數據,格式可支援兩種,第一種各點為陣列[[x1,y1],[x2,y2],...],例如[[0.1,5],[0.2,12],...],第二種各點為物件,屬性至少要有x與y,格式為[{x:x1,y:y1},{x:x2,y:y2},...],例如[{x:0.1,y:5},{x:0.2,y:12},...],key值x與y可由opt更換 * @param {Number} x 輸入要內插點的x值 * @param {Object} [opt={}] 輸入設定物件,預設{} * @param {String} [opt.mode=''] 輸入內插方法,可選'linear'、'stairs'、'blocks',預設'linear' * @param {String} [opt.keyX='x'] 輸入若數據為物件陣列,取物件x值時的key字串,預設為'x' * @param {String} [opt.keyY='y'] 輸入若數據為物件陣列,取物件y值時的key字串,預設為'y' * @param {Number} [opt.xMin=undefined] 輸入若mode='stairs',更改x範圍下限值,預設為undefined * @param {Number} [opt.xMax=undefined] 輸入若mode='stairs',更改x範圍上限值,預設為undefined * @returns {Number|Object} 回傳內插結果數值,或是無法內插時之錯誤訊息物件 * @example * * let r * let x * * let ps = [ * { x: 1, y: 0.2 }, * { x: 3, y: 1.2 }, * { x: 4, y: 2 }, * ] * * let psInv = [ * { x: 4, y: 2 }, * { x: 3, y: 1.2 }, * { x: 1, y: 0.2 }, * ] * * let psErr = [ * { x: 'a', y: 0.2 }, * { x: 'mnop', y: 1.2 }, * { x: 'xyz', y: 2 }, * ] * * let psEmpty = [ * ] * * let psEffOne = [ * { x: 1, y: 0.2 }, * { x: 'mnop', y: 1.2 }, * { x: 'xyz', y: 2 }, * ] * * let psP = [ * { a: 1, b: 0.2 }, * { a: 3, b: 1.2 }, * { a: 4, b: 2 }, * ] * * let opt = { * mode: 'stairs', * } * * let optX = { * mode: 'stairs', * xMin: 0, * xMax: 4.5, * } * * let optP = { * keyX: 'a', * keyY: 'b', * } * * x = 0 * r = interp1(psErr, x) * console.log(`linear(error data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(error data): x=0 r={"err":"ps(length=0) is not an effective array","ps":[{"x":"a","y":0.2},{"x":"mnop","y":1.2},{"x":"xyz","y":2}],"psEff":[]} * * x = 0 * r = interp1(psEmpty, x) * console.log(`linear(empty data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(empty data): x=0 r={"err":"ps(length=0) is not an effective array","ps":[],"psEff":[]} * * x = 0 * r = interp1(psEffOne, x) * console.log(`linear(one point): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(one point): x=0 r={"err":"ps(length=1) is one point only","ps":[{"x":1,"y":0.2},{"x":"mnop","y":1.2},{"x":"xyz","y":2}],"psEff":[{"x":1,"y":0.2}]} * * x = 0 * r = interp1(ps, x) * console.log(`linear: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=0 r={"err":"x[0] less than lower limit[1]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":0,"trend":"increasing sequence","xmin":1,"xmax":4}} * * x = 1 * r = interp1(ps, x) * console.log(`linear: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=1 r=0.2 * * x = 2 * r = interp1(ps, x) * console.log(`linear: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=2 r=0.7 * * x = 2.6 * r = interp1(ps, x) * console.log(`linear: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=2.6 r=1 * * x = 3 * r = interp1(ps, x) * console.log(`linear: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=3 r=1.2 * * x = 3.5 * r = interp1(ps, x) * console.log(`linear: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=3.5 r=1.6 * * x = 4 * r = interp1(ps, x) * console.log(`linear: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=4 r=2 * * x = 5 * r = interp1(ps, x) * console.log(`linear: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=5 r={"err":"x[5] greater than upper limit[4]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":5,"trend":"increasing sequence","xmin":1,"xmax":4}} * * x = 0 * r = interp1(psInv, x) * console.log(`linear(inverse data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(inverse data): x=0 r={"err":"x[0] less than lower limit[1]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":0,"trend":"increasing sequence","xmin":1,"xmax":4}} * * x = 1 * r = interp1(psInv, x) * console.log(`linear(inverse data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(inverse data): x=1 r=0.2 * * x = 2 * r = interp1(psInv, x) * console.log(`linear(inverse data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(inverse data): x=2 r=0.7 * * x = 2.6 * r = interp1(psInv, x) * console.log(`linear(inverse data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(inverse data): x=2.6 r=1 * * x = 3 * r = interp1(psInv, x) * console.log(`linear(inverse data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(inverse data): x=3 r=1.2 * * x = 3.5 * r = interp1(psInv, x) * console.log(`linear(inverse data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(inverse data): x=3.5 r=1.6 * * x = 4 * r = interp1(psInv, x) * console.log(`linear(inverse data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear(inverse data): x=4 r=2 * * x = 5 * r = interp1(psInv, x) * console.log(`linear(inverse data): x=${x}`, 'r=' + JSON.stringify(r)) * // => linear: x=5 r={"err":"x[5] greater than upper limit[4]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":5,"trend":"increasing sequence","xmin":1,"xmax":4}} * * x = -1 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=-1 r={"err":"x[-1] less than lower limit[1]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":-1,"trend":"increasing sequence","xmin":1,"xmax":4}} * * x = 0.51 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=0.51 r={"err":"x[0.51] less than lower limit[1]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":0.51,"trend":"increasing sequence","xmin":1,"xmax":4}} * * x = 1 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=1 r=0.2 * * x = 1.9 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=1.9 r=0.2 * * x = 2 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=2 r=0.2 * * x = 2.1 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=2.1 r=1.2 * * x = 2.5 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=2.5 r=1.2 * * x = 3 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=3 r=1.2 * * x = 3.49 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=3.49 r=1.2 * * x = 3.5 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=3.5 r=1.2 * * x = 3.51 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=3.51 r=2 * * x = 4 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=4 r=2 * * x = 4.5 * r = interp1(ps, x, opt) * console.log(`stairs: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs: x=4.5 r={"err":"x[4.5] greater than upper limit[4]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":4.5,"trend":"increasing sequence","xmin":1,"xmax":4}} * * x = -1 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=-1 r={"err":"x[-1] less than lower limit[0]","data":{"ps":[{"x":0,"y":0.2},{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2},{"x":4.5,"y":2}],"x":-1,"trend":"increasing sequence","xmin":0,"xmax":4.5}} * * x = 0 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=0 r=0.2 * * x = 0.49 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=0.49 r=0.2 * * x = 0.5 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=0.5 r=0.2 * * x = 0.51 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=0.51 r=0.2 * * x = 1 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=1 r=0.2 * * x = 1.9 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=1.9 r=0.2 * * x = 2 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=2 r=0.2 * * x = 2.1 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=2.1 r=1.2 * * x = 2.5 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=2.5 r=1.2 * * x = 3 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=3 r=1.2 * * x = 3.49 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=3.49 r=1.2 * * x = 3.5 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=3.5 r=1.2 * * x = 3.51 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=3.51 r=2 * * x = 4 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=4 r=2 * * x = 4.49 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=4.49 r=2 * * x = 4.5 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=4.5 r=2 * * x = 4.51 * r = interp1(ps, x, optX) * console.log(`stairs with x-limit: x=${x}`, 'r=' + JSON.stringify(r)) * // => stairs with x-limit: x=4.51 r={"err":"x[4.51] greater than upper limit[4.5]","data":{"ps":[{"x":0,"y":0.2},{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2},{"x":4.5,"y":2}],"x":4.51,"trend":"increasing sequence","xmin":0,"xmax":4.5}} * * x = 0 * r = interp1(psP, x, optP) * console.log(`linear by keyX &amp; keyY: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear by keyX &amp; keyY: x=0 r={"err":"x[0] less than lower limit[1]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":0,"trend":"increasing sequence","xmin":1,"xmax":4}} * * x = 1 * r = interp1(psP, x, optP) * console.log(`linear by keyX &amp; keyY: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear by keyX &amp; keyY: x=1 r=0.2 * * x = 2 * r = interp1(psP, x, optP) * console.log(`linear by keyX &amp; keyY: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear by keyX &amp; keyY: x=2 r=0.7 * * x = 2.6 * r = interp1(psP, x, optP) * console.log(`linear by keyX &amp; keyY: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear by keyX &amp; keyY: x=2.6 r=1 * * x = 3 * r = interp1(psP, x, optP) * console.log(`linear by keyX &amp; keyY: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear by keyX &amp; keyY: x=3 r=1.2 * * x = 3.5 * r = interp1(psP, x, optP) * console.log(`linear by keyX &amp; keyY: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear by keyX &amp; keyY: x=3.5 r=1.6 * * x = 4 * r = interp1(psP, x, optP) * console.log(`linear by keyX &amp; keyY: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear by keyX &amp; keyY: x=4 r=2 * * x = 5 * r = interp1(psP, x, optP) * console.log(`linear by keyX &amp; keyY: x=${x}`, 'r=' + JSON.stringify(r)) * // => linear by keyX &amp; keyY: x=5 r={"err":"x[5] greater than upper limit[4]","data":{"ps":[{"x":1,"y":0.2},{"x":3,"y":1.2},{"x":4,"y":2}],"x":5,"trend":"increasing sequence","xmin":1,"xmax":4}} * */ function interp1(ps, x, opt = {}) { //check if (!isarr(ps)) { return { err: 'ps is not an array' } } if (!isNumber(x)) { return { err: 'x is not a number' } } //toArrayXY let psEff = toArrayXY(ps, opt) //check if (get(psEff, 'err')) { return get(psEff, 'err') } //check if (size(psEff) === 0) { return { err: 'ps(length=0) is not an effective array', ps, psEff, } } else if (size(psEff) === 1) { return { err: 'ps(length=1) is one point only', ps, psEff, } } //checkIncrea let trend = checkTrend(psEff) //check if (trend === 'no') { return { err: 'psEff is not increasing or decreasing' } } //反序 if (trend === reverseOrderList) { trend = orderList psEff = reverse(psEff) } //mode let mode = get(opt, 'mode') if (mode !== 'linear' &amp;&amp; mode !== 'stairs' &amp;&amp; mode !== 'blocks') { mode = 'linear' } try { if (mode === 'linear') { return interp1Linear(psEff, x) } else if (mode === 'blocks') { return interp1Blocks(psEff, x) } else if (mode === 'stairs') { return interp1Stairs(psEff, x, opt) } } catch (err) { return { err: err.toString(), } } } export default interp1 </code></pre> </article> </section> </div> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Wed Jul 19 2023 23:38:49 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme. </footer> <script>prettyPrint();</script> <script src="scripts/polyfill.js"></script> <script src="scripts/linenumber.js"></script> </body> </html>