亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript制作公式編輯器,函數編輯器和圖形繪制

2019-11-14 16:44:46
字體:
來源:轉載
供稿:網友

自己是電子信息方向的,因此總是需要處理大量的電路實驗、電路數據和電路仿真處理,每次處理數據時候還需要同樣的數據很多遍, 又需要關于電路的頻率響應和時域響應情況,所以一直有做一個這樣公式編輯器的打算了。 本來想使用VC的,但是想到javascript的eval()函數,就可以省去數據計算的算法了,而且對于用戶函數擴展都有幫助。

     仔細想想后,作品需要有公式編輯、自定義操作符、自定義函數、系統函數調用、變量更新處理、定時器實現遍歷變量處理、圖形繪制和保存公式和函數等模塊。

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  這就是最終的界面了前面講的功能基本都實現了。

    我覺的IT領域代碼純粹是屬于技術了,只要花時間總是能夠做好的,只是這種架構的模式和創意很重要。 而這種感性認識很大一部分來自于視野,看的東西、經歷的東西、悟的東西多了,靈感也會多點。 因此,還是希望我們程序員們不要總是宅在電腦前了。

 一:公式編輯     

      好了,言歸正傳。 js里面有個eval()函數,可以動態執行代碼。因此可以讓用戶操作腳本的運行。 在這個編輯器中也就是這樣,將用戶編輯的公式,經過變量處理、運算符號判斷等處理,轉換成eval()可以運行的語句。關于將用戶輸入的語句轉換成可執行語句是比較困難、麻煩的,因為需要大量的判斷,例如是否碰到運算符,數字,變量是否重復,變量命名規制等等。 由于比較復雜,我貼下自己的供參考:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<span style="font-size:18px;">var dealSentence = function (str, num) //num對應與order
    {
        var pos, end, i = 0, temp = "";
        order[num] = "";
        while (i < str.length)//遍歷一次
        {
            if (judgeChar(str.charAt(i)) == 0) //如果當前的字符不是數字和字母,就應該是運算符
            //可以通過其他辦法動態添加運算符
                order[num] += str.charAt(i); i++;
            }
            else  //說明是一個變量,需要創建變量
            {
                pos = i; end = 0; //記錄這個變量的首尾位置
                while (judgeChar(str.charAt(i)) >0) //直到檢驗出符號或者退出
                {
                    i++;
                    if (i >= str.length) break;
                }
                end = i; temp = str.substring(pos, end); //獲取對應的子字串
                var x = judgeMathFunction(temp); //判斷是否是數學符號
                if (judgeStringNum(temp) == false//表示字符串不全是數字,有可能是變量,也有可能是數學函數
                {
                    if (x < 0) //如果不是數學函數
                    {
                        var x = new PARAM(); x.name = temp; x.num = paramcount; x.value = 0; //初始化
                        pos = judgeParamExist(x.name);
                        if (pos < 0) //表示沒有與之前的變量重合
                        {
                            param[paramcount] = x; order[num] += x.value; paramcount++;  //創建變量并且保存
                        }
                        else
                            order[num] += param[pos].value;
                    }
                    else
                        if (x < 100) //表示是自帶的數學函數
                            order[num] += "Math." + temp; //轉換成對應的數學運算
                        else  //>=100表示對應的是自定義的函數
                            order[num] += temp; //先不進行處理
                }
                else //如果字符串只是數字,不創建變量
                    order[num] += temp;
            }
        }
    }</span>

    其中包含了許多的函數和變量、對象,大家可能不懂,也沒關系,知道在判斷時候小心嚴謹點就好了。

    二:變量處理

      大家想,一旦用戶輸入了公式,就希望輕松改一下參數就可以瞬間算出全部結果了,所以可以把變量和結果制作成表格,允許用戶修改變量值并且更新結果。

     對于高級功能。 大家有沒有遇到過一個運算過程中需要將某個變量或幾個變量遞增或遞減呢? 應該會的,我求解電路方程時經常需要變化。

      技術活可以用setInterval()實現的,給個大概:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<span style="font-size:18px;"> /*******開始運行高級功能****************/
     var time = null;
     var start = function () //
     {
         readValue(); //獲取值
         dealFlag(); //處理標簽
         if (begin == true) //表示開始定時器
             time = setInterval("settime()", 300); //沒300ms處理一次
         else
             clearInterval(time);
     }
     /******定時器************/
     var settime = function () //
     {
         for (var i = 0; i < paramcount; i++)// 先更新值
         {
             if (method[i] == "y" || method[i] == "Y")
                 param[i].value += parseFloat(small[i]);
             if (method[i] == "n" || method == "N")
                 param[i].value -= parseFloat(small[i]);
         }
         updateAdancedTable();
     }
     /**************************處理begin***************/
     var dealFlag = function ()//
     {
         if (begin == false)//
         {
             begin = true; document.getElementById("BS").innerHTML = "暫停";
         }
         else //
         {
             begin = false; document.getElementById("BS").innerHTML = "開始";
         }
     }</span>


   同樣不是不完整的,需要其他函數的支持。

       三:自定義函數或者符號

      有些時候,用戶需要經常使用某些算式,那么就可以讓他們自己定義成函數或者操作符了,例如我們經常使用電路中并聯運算,所以可以定義并聯符號//,多方便。

      這個其實還是基于eval()的,例如 str="function And(){"+ order+"} And()";

其中order是用戶編輯的,可以修改一下。 先定義函數,在執行這個函數,eval(str)后就完成了。具體的大家可以再好好想想

     四:圖形繪制

     圖形是表達式最直觀的表現形式了,例如找最值,拐點,趨勢等。

     圖形一般就要求自變量和因變量了,在固定自變量輸入范圍后利用插值法就可以繪制圖形了。

    繪制圖形這里需要用到HTML5中<canvas>對象,而且還需要新的瀏覽器的支持,這個功能與保存功能是矛盾的,因為只有IE得到用戶許可后才能保存文件,但是連IE8都不支持html5,杯具了……

     

    東西都是做的出來的,只是想法不一樣罷了。而且這個編輯器也還是有些bug的,只要大家有創意,都能夠完成,歡迎大家指正與討論。  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品在线极品| 欧美日韩国产91| 亚洲欧美在线免费| 国产精品久久久久77777| 欧洲午夜精品久久久| 国产精欧美一区二区三区| 国产日韩欧美夫妻视频在线观看| 欧美性猛交xxxx偷拍洗澡| 国产精品丝袜久久久久久高清| 成人有码在线播放| 国产精品久久久久一区二区| 国产精品极品美女在线观看免费| 国产97在线视频| 日韩电影免费在线观看中文字幕| 欧美理论电影在线观看| 日韩成人av一区| 中文字幕在线视频日韩| 日韩av电影中文字幕| 欧美贵妇videos办公室| 成人在线观看视频网站| 国产亚洲精品美女| 久久久久中文字幕| 91精品国产91久久久久久久久| 国产视频观看一区| 欧美激情一二三| 久久精品国产综合| 欧美日韩国产一区在线| 日韩视频一区在线| 亚洲视频在线观看网站| 96sao精品视频在线观看| 日韩中文有码在线视频| 亚洲天堂一区二区三区| 国产精品网红福利| 成人免费看吃奶视频网站| 国产精品揄拍500视频| 精品色蜜蜜精品视频在线观看| 欧美成人合集magnet| 国产午夜精品免费一区二区三区| 国产日本欧美在线观看| 日韩精品中文字幕在线| 91精品视频大全| 久久久久久一区二区三区| 日韩一区av在线| 午夜精品久久久99热福利| 欧美成人全部免费| 91精品国产综合久久久久久久久| 欧美在线免费视频| 国产99在线|中文| 欧美大片va欧美在线播放| 国产91精品在线播放| 亚洲欧美中文日韩在线v日本| 日韩av电影免费观看高清| 欧美激情精品在线| 亚洲天天在线日亚洲洲精| 中文字幕精品国产| 成人中文字幕+乱码+中文字幕| 精品国产一区二区三区在线观看| 亚洲午夜国产成人av电影男同| 成人动漫网站在线观看| 欧美一级片一区| 成人久久一区二区三区| 国产视频久久久久久久| 日韩亚洲精品视频| 亚洲精品国产精品国自产在线| 日韩电影大全免费观看2023年上| 精品视频偷偷看在线观看| 欧美成人午夜激情视频| 精品精品国产国产自在线| 久久久极品av| 国产视频福利一区| 国产婷婷97碰碰久久人人蜜臀| 欧洲成人在线观看| 国产精品96久久久久久又黄又硬| 国产成人精品999| 伊人久久免费视频| 国产日韩欧美91| 久久激情视频久久| 日韩国产在线看| 日本sm极度另类视频| 亚洲精品女av网站| 午夜精品久久久久久久白皮肤| 亚洲女人初尝黑人巨大| 国产中文日韩欧美| 91亚洲va在线va天堂va国| 欧美在线免费看| 2019中文字幕在线免费观看| y97精品国产97久久久久久| 欧美日韩不卡合集视频| 91九色综合久久| 国产精品久久91| 国产成人高清激情视频在线观看| 欧洲成人性视频| 国产精品一区二区三区毛片淫片| 91探花福利精品国产自产在线| 亚洲黄页网在线观看| 992tv在线成人免费观看| 久久久999精品免费| 韩国三级日本三级少妇99| 国产91精品高潮白浆喷水| 欧美精品激情在线| 久久伊人免费视频| 成人a级免费视频| 91精品国产免费久久久久久| 亚洲国产欧美自拍| 亚洲日本aⅴ片在线观看香蕉| 欧美丝袜一区二区| 久久精品久久久久久国产 免费| 欧美成人免费网| 欧美国产日本在线| 日韩亚洲成人av在线| 亚洲精品大尺度| 国产a级全部精品| 日韩精品极品在线观看| 久久精品91久久久久久再现| 日韩av高清不卡| 国产欧美一区二区三区久久| 欧美日韩激情小视频| 日韩成人xxxx| 亚洲r级在线观看| 韩国19禁主播vip福利视频| 久久国产精品免费视频| 亚洲aⅴ日韩av电影在线观看| 国产精品尤物福利片在线观看| 欧美成人免费小视频| 欧美剧在线观看| 国产精品成久久久久三级| 高清欧美一区二区三区| 国产精品久久久久久久久粉嫩av| 伦理中文字幕亚洲| 精品亚洲aⅴ在线观看| 亚洲精品一区中文字幕乱码| 国产在线久久久| 欧美国产日韩在线| 欧美国产日韩二区| 日本成人在线视频网址| 91久久精品国产| 亚洲尤物视频网| 亚洲qvod图片区电影| 97热在线精品视频在线观看| 国产一区二区三区在线免费观看| 在线亚洲欧美视频| 97视频色精品| 亚洲一区二区三区在线视频| 亚洲成人黄色网| 日韩精品在线观| 97免费视频在线| 亚洲精品成人久久久| 久久全国免费视频| 欧美亚洲另类制服自拍| 久久九九热免费视频| 中日韩美女免费视频网址在线观看| 亚洲色图第一页| 国产99久久精品一区二区永久免费| 国内精品久久久久久| 97不卡在线视频| 韩国精品美女www爽爽爽视频| 91网站在线看| 国产一级揄自揄精品视频| 精品视频9999| 国产精品91久久久久久| 日韩精品久久久久久久玫瑰园| 亚洲一区二区久久久久久久| 91在线|亚洲| 亚洲va码欧洲m码|