差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
javascript:circuitjs [2023/10/30 06:25] – [回路一覧] ともやん | javascript:circuitjs [2024/08/05 16:19] (現在) – [付録] ともやん | ||
---|---|---|---|
行 2: | 行 2: | ||
本家: [[https:// | 本家: [[https:// | ||
forked: [[https:// | forked: [[https:// | ||
- | [[https:// | + | [[https:// |
[[https:// | [[https:// | ||
+ | ソースコード: | ||
CircuitJS1はブラウザ上で動作する電子回路シミュレータです。これは元々 Paul Falstad によって Java アプレットとして作成されました。\\ | CircuitJS1はブラウザ上で動作する電子回路シミュレータです。これは元々 Paul Falstad によって Java アプレットとして作成されました。\\ | ||
これは、GWT を使用してブラウザで実行できるように Iain Sharp によって調整されました。\\ | これは、GWT を使用してブラウザで実行できるように Iain Sharp によって調整されました。\\ | ||
[[https:// | [[https:// | ||
+ | |||
+ | 類似サービス: | ||
===== 使い方 ===== | ===== 使い方 ===== | ||
フルスクリーン: | フルスクリーン: | ||
- | <html> | + | <WRAP circuitjs><html> |
- | | + | <iframe src=" |
- | .circuitjs { | + | </html></WRAP> |
- | margin: 0 0 -16px; | + | |
- | position: relative; | + | |
- | z-index: 0; | + | |
- | } | + | |
- | .circuitjs iframe { | + | |
- | border: none; | + | |
- | width: 610px; | + | |
- | height: 300px; | + | |
- | } | + | |
- | .wrap_circuit_description { | + | |
- | position: relative; | + | |
- | z-index: 1; | + | |
- | } | + | |
- | /*.dokuwiki div.wrap_color_mincode_long { | + | |
- | height: 100px; | + | |
- | overflow: scroll; | + | |
- | } | + | |
- | .dokuwiki div.wrap_color_mincode_long pre { | + | |
- | height: unset; | + | |
- | overflow-y: unset; | + | |
- | }*/ | + | |
- | | + | |
- | <div class=" | + | |
- | | + | |
- | </div> | + | |
- | | + | |
- | | + | |
- | iframe.contentWindow.document.getElementsByClassName(" | + | |
- | </ | + | |
- | </html> | + | |
===== 回路一覧 ===== | ===== 回路一覧 ===== | ||
行 489: | 行 462: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | ===== URL パラメータ ===== | ||
+ | |||
+ | ==== ctz ==== | ||
+ | [[git> | ||
+ | < | ||
+ | <script src=" | ||
+ | < | ||
+ | window.addEventListener(" | ||
+ | let preComp = document.getElementById(" | ||
+ | let preDecomp = document.getElementById(" | ||
+ | | ||
+ | let strDecompressed = LZString.decompressFromEncodedURIComponent(preComp.innerText); | ||
+ | preDecomp.innerText = strDecompressed; | ||
+ | | ||
+ | let ifrCircuitjs = document.getElementById(" | ||
+ | ifrCircuitjs.src = " | ||
+ | }); | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP color_term> | ||
+ | <WRAP color_mincode>< | ||
+ | <script src=" | ||
+ | < | ||
+ | window.addEventListener(" | ||
+ | let preComp = document.getElementById(" | ||
+ | let preDecomp = document.getElementById(" | ||
+ | | ||
+ | let strDecompressed = LZString.decompressFromEncodedURIComponent(preComp.innerText); | ||
+ | preDecomp.innerText = strDecompressed; | ||
+ | | ||
+ | let ifrCircuitjs = document.getElementById(" | ||
+ | ifrCircuitjs.src = " | ||
+ | }); | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP color_term> | ||
+ | <WRAP color_mincode>< | ||
+ | CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxEIiQUhAQFMBaMMAKABcQAWQrkbNHTAp+g2hBgI8eDJC5h8aPJBRSo0QppIJhCSlywJsINLQAm9AGYBDAK4AbdqzAY+A2phHZCefj-DI8OqIIABK9ADOAJYR7NYAdgDG9KzYstxghKK0PG6CElCsAO7ZJhgi8lmeJqwATqVcvu7gXHw5spDFpdXNYK2FJc2NQhW+nfU6oyMtbSZozoQikzPTKFweIBY2DuyM9vRmUEcSsGxptMtrF8L8cgG0nSXL2N7TlQPTuHyE+LdtrAAHCi-L7A3zvYwPQEZLJDTIw-hHR6lbxNQTvZFwrLvDFdHHw5a4p43d4-cHw5FKbhonJjLpYky-XEAN0Z5Kqv2EYyO6zoSPUCHp-gZzUpTN8VK5NSBZJWstBkI+yz6305-WRhN8suGnRl4rBK0VnQAHnQiPwjHQXhbsS0QABRVimhBrEzEYxGEQoYi2vogADCTu4GCQuGxeDckGI3DtACFWAB7I4CCjcKPRmCLJAwOBZ46sIA | ||
+ | </ | ||
+ | <WRAP color_mincode_hlong>< | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP circuitjs>< | ||
+ | <iframe id=" | ||
+ | </ | ||
+ | |||
+ | === JSFiddle === | ||
+ | <WRAP jsfiddle>< | ||
+ | <iframe width=" | ||
+ | </ | ||
+ | |||
+ | ===== JS インタフェース ===== | ||
+ | ソースコード: | ||
+ | <WRAP circuitjs>< | ||
+ | <iframe id=" | ||
+ | < | ||
+ | <p> | ||
+ | iframe で実行されているシミュレーターと連携する JavaScript コードを作成できます。 | ||
+ | シミュレータ コードは同じ Web サイト上でホストされています (同じ起源を持っています)。 あなたのコードは回路のリストを取得できます | ||
+ | 要素を取得し、各要素に関する情報 (各ノードの電圧や 2 端子要素の電流など) を取得します。 | ||
+ | 外部電圧ノードの電圧を設定します。 | ||
+ | </p> | ||
+ | <p> | ||
+ | <button onclick=" | ||
+ | <button onclick=" | ||
+ | <button onclick=" | ||
+ | <button onclick=" | ||
+ | </p> | ||
+ | <p> | ||
+ | extsin frequency: | ||
+ | <input id=" | ||
+ | <br> | ||
+ | extsin amplitude: | ||
+ | <input id=" | ||
+ | </p> | ||
+ | <div id=" | ||
+ | |||
+ | < | ||
+ | |||
+ | // get iframe the simulator is running in. Must have same origin as this file! | ||
+ | var iframe = document.getElementById(" | ||
+ | |||
+ | var sim; | ||
+ | var freq, ampl; | ||
+ | var elmList = []; | ||
+ | |||
+ | function round(x) { | ||
+ | return Math.round(x*1000)/ | ||
+ | } | ||
+ | |||
+ | // called when simulator updates its display | ||
+ | function didUpdate(sim) { | ||
+ | var info = document.getElementById(" | ||
+ | info.innerHTML = "time = " + round(sim.getTime()) + "< | ||
+ | |||
+ | // get voltage of labeled node " | ||
+ | var vsense = sim.getNodeVoltage(" | ||
+ | info.innerHTML += "< | ||
+ | |||
+ | freq = parseFloat(document.getElementById(" | ||
+ | ampl = parseFloat(document.getElementById(" | ||
+ | |||
+ | var bstr = ""; | ||
+ | var bval = 0; | ||
+ | var i; | ||
+ | for (i = 7; i >= 0; i--) { | ||
+ | var v = sim.getNodeVoltage(" | ||
+ | if (v > 2.5) { | ||
+ | bstr += " | ||
+ | bval = 2*bval+1; | ||
+ | } else { | ||
+ | bstr += " | ||
+ | bval = 2*bval; | ||
+ | } | ||
+ | } | ||
+ | info.innerHTML += "< | ||
+ | |||
+ | var rcount = 0; | ||
+ | |||
+ | // go through list of elements | ||
+ | for (const elm of elmList) { | ||
+ | if (elm.getType() == " | ||
+ | // show info about each resistor | ||
+ | rcount++; | ||
+ | info.innerHTML += "< | ||
+ | info.innerHTML += "< | ||
+ | } else if (elm.getType() == " | ||
+ | // show voltage of each labeled node | ||
+ | info.innerHTML += "< | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // called when simulator analyzes a circuit (when a circuit is loaded or edited) | ||
+ | function didAnalyze(sim) { | ||
+ | console.log(" | ||
+ | |||
+ | // get the list of elements | ||
+ | elmList = sim.getElements(); | ||
+ | |||
+ | // log some info about each one | ||
+ | for (const elm of elmList) { | ||
+ | console.log(" | ||
+ | console.log(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // called every timestep | ||
+ | function didStep(sim) { | ||
+ | var t = sim.getTime(); | ||
+ | var q = ampl*Math.sin(freq*Math.PI*2*t); | ||
+ | |||
+ | // set voltage of external voltage " | ||
+ | sim.setExtVoltage(" | ||
+ | } | ||
+ | |||
+ | // callback called when simulation is done initializing | ||
+ | function simLoaded() { | ||
+ | // get simulator object | ||
+ | sim = iframe.contentWindow.CircuitJS1; | ||
+ | |||
+ | // set up callbacks on update and timestep | ||
+ | sim.onupdate = didUpdate; | ||
+ | sim.ontimestep = didStep; | ||
+ | sim.onanalyze = didAnalyze; | ||
+ | } | ||
+ | |||
+ | // set up callback | ||
+ | iframe.contentWindow.oncircuitjsloaded = simLoaded; | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== 参考文献 ===== | ||
+ | |||
+ | ==== 付録 ==== | ||
+ | [[tw> | ||
+ | |||
+ | ==== 退避場 ==== | ||
+ | [[https:// | ||