javascript:circuitjs

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
javascript:circuitjs [2023/10/30 06:06] ともやんjavascript:circuitjs [2024/08/05 16:19] (現在) – [付録] ともやん
行 2: 行 2:
 本家: [[https://github.com/pfalstad/circuitjs1|]] [[gtr>https://github.com/pfalstad/circuitjs1|翻訳]] Paul's git\\ 本家: [[https://github.com/pfalstad/circuitjs1|]] [[gtr>https://github.com/pfalstad/circuitjs1|翻訳]] Paul's git\\
 forked: [[https://github.com/sharpie7/circuitjs1|]] [[gtr>https://github.com/sharpie7/circuitjs1|翻訳]] Iain's git\\ forked: [[https://github.com/sharpie7/circuitjs1|]] [[gtr>https://github.com/sharpie7/circuitjs1|翻訳]] Iain's git\\
-[[https://www.falstad.com/circuit/|]] [[gtr>https://www.falstad.com/circuit/|翻訳]] Paul's Page: Version 2.8.0js\\+[[https://www.falstad.com/circuit/|]] [[gtr>https://www.falstad.com/circuit/|翻訳]] Paul's Page: Version 2.9.0js([[https://git>pfalstad/circuitjs1/pull/71|日本語化 PR #71]])\\
 [[https://lushprojects.com/circuitjs/|]] [[gtr>https://lushprojects.com/circuitjs/|翻訳]] Iain's Page: Version 2.4.2js\\ [[https://lushprojects.com/circuitjs/|]] [[gtr>https://lushprojects.com/circuitjs/|翻訳]] Iain's Page: Version 2.4.2js\\
 +ソースコード: [[git>pfalstad/circuitjs1|GitHub - pfalstad/circuitjs1: Electronic Circuit Simulator in the Browser]] [[gtr>https://github.com/pfalstad/circuitjs1|翻訳]]\\
  
 CircuitJS1はブラウザ上で動作する電子回路シミュレータです。これは元々 Paul Falstad によって Java アプレットとして作成されました。\\ CircuitJS1はブラウザ上で動作する電子回路シミュレータです。これは元々 Paul Falstad によって Java アプレットとして作成されました。\\
 これは、GWT を使用してブラウザで実行できるように Iain Sharp によって調整されました。\\ これは、GWT を使用してブラウザで実行できるように Iain Sharp によって調整されました。\\
 [[https://github.com/pfalstad/circuitjs1|pfalstad/circuitjs1: Electronic Circuit Simulator in the Browser]] より\\ [[https://github.com/pfalstad/circuitjs1|pfalstad/circuitjs1: Electronic Circuit Simulator in the Browser]] より\\
 +
 +類似サービス: [[https://everycircuit.com/|EveryCircuit: Animated interactive circuit simulator]]\\
  
 ===== 使い方 ===== ===== 使い方 =====
 フルスクリーン: [[https://www.falstad.com/circuit/circuitjs.html?startCircuit=joule-thief.txt|]]\\ フルスクリーン: [[https://www.falstad.com/circuit/circuitjs.html?startCircuit=joule-thief.txt|]]\\
-<html> +<WRAP circuitjs><html
-  <style> +  <iframe src="https://www.falstad.com/circuit/circuitjs.html?hideMenu=true&running=false&startCircuit=joule-thief.txt" loading="lazy"></iframe> 
-    .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; +
-    }*/ +
-  </style> +
-    <div class="circuitjs"> +
-      <iframe src="https://www.falstad.com/circuit/circuitjs.html?hideMenu=true&running=false&startCircuit=joule-thief.txt" loading="lazy"></iframe> +
-    </div> +
-  <script> +
-    /*const iframe = document.getElementsByClassName("circuitjs")[0].getElementsByTagName("iframe")[0]; +
-    iframe.contentWindow.document.getElementsByClassName("topButton").click();*/ +
-  </script> +
-</html>+
  
 ===== 回路一覧 ===== ===== 回路一覧 =====
 +[[.circuitjs:circuits|Circuits]]\\
 [[https://github.com/pfalstad/circuitjs1/blob/c192b71e325624e56d7ed9db71456b48d2e48871/src/com/lushprojects/circuitjs1/public/setuplist.txt|]]\\ [[https://github.com/pfalstad/circuitjs1/blob/c192b71e325624e56d7ed9db71456b48d2e48871/src/com/lushprojects/circuitjs1/public/setuplist.txt|]]\\
 src/com/lushprojects/circuitjs1/public/setuplist.txt\\ src/com/lushprojects/circuitjs1/public/setuplist.txt\\
行 488: 行 462:
 </pre></html></WRAP> </pre></html></WRAP>
 </WRAP> </WRAP>
 +
 +===== URL パラメータ =====
 +
 +==== ctz ====
 +[[git>pfalstad/circuitjs1/blob/d07cf50b5f4eaeb93948030629b870fa84f1f54c/src/com/lushprojects/circuitjs1/client/CirSim.java#L359|]]\\
 +<html>
 +  <script src="https://cdn.jsdelivr.net/npm/lz-string/libs/lz-string.min.js"></script>
 +  <script>
 +    window.addEventListener("load", (event) => {
 +      let preComp = document.getElementById("compressed");
 +      let preDecomp = document.getElementById("decompressed");
 +      
 +      let strDecompressed = LZString.decompressFromEncodedURIComponent(preComp.innerText);
 +      preDecomp.innerText = strDecompressed;
 +      
 +      let ifrCircuitjs = document.getElementById("ifr_circuitjs");
 +      ifrCircuitjs.src = "https://www.falstad.com/circuit/circuitjs.html?hideMenu=true&running=false&ctz=" + preComp.innerText;
 +    });
 +  </script>
 +</html>
 +
 +<WRAP color_term>
 +<WRAP color_mincode><code javascript>
 +  <script src="https://cdn.jsdelivr.net/npm/lz-string/libs/lz-string.min.js"></script>
 +  <script>
 +    window.addEventListener("load", (event) => {
 +      let preComp = document.getElementById("compressed");
 +      let preDecomp = document.getElementById("decompressed");
 +    
 +      let strDecompressed = LZString.decompressFromEncodedURIComponent(preComp.innerText);
 +      preDecomp.innerText = strDecompressed;
 +      
 +      let ifrCircuitjs = document.getElementById("ifr_circuitjs");
 +      ifrCircuitjs.src = "https://www.falstad.com/circuit/circuitjs.html?hideMenu=true&running=false&ctz=" + preComp.innerText;
 +    });
 +  </script>
 +</code></WRAP>
 +</WRAP>
 +
 +<WRAP color_term>
 +<WRAP color_mincode><html><pre id="compressed">
 +CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxEIiQUhAQFMBaMMAKABcQAWQrkbNHTAp+g2hBgI8eDJC5h8aPJBRSo0QppIJhCSlywJsINLQAm9AGYBDAK4AbdqzAY+A2phHZCefj-DI8OqIIABK9ADOAJYR7NYAdgDG9KzYstxghKK0PG6CElCsAO7ZJhgi8lmeJqwATqVcvu7gXHw5spDFpdXNYK2FJc2NQhW+nfU6oyMtbSZozoQikzPTKFweIBY2DuyM9vRmUEcSsGxptMtrF8L8cgG0nSXL2N7TlQPTuHyE+LdtrAAHCi-L7A3zvYwPQEZLJDTIw-hHR6lbxNQTvZFwrLvDFdHHw5a4p43d4-cHw5FKbhonJjLpYky-XEAN0Z5Kqv2EYyO6zoSPUCHp-gZzUpTN8VK5NSBZJWstBkI+yz6305-WRhN8suGnRl4rBK0VnQAHnQiPwjHQXhbsS0QABRVimhBrEzEYxGEQoYi2vogADCTu4GCQuGxeDckGI3DtACFWAB7I4CCjcKPRmCLJAwOBZ46sIA
 +</pre></html></WRAP>
 +<WRAP color_mincode_hlong><html><pre id="decompressed">
 +</pre></html></WRAP>
 +</WRAP>
 +
 +<WRAP circuitjs><html>
 +  <iframe id="ifr_circuitjs" src="https://www.falstad.com/circuit/circuitjs.html?hideMenu=true&running=false" loading="lazy"></iframe>
 +</html></WRAP>
 +
 +=== JSFiddle ===
 +<WRAP jsfiddle><html>
 +<iframe width="100%" height="665" src="//jsfiddle.net/tomoyan596/u5efyg28/embedded/result,js,html,css/dark/" allowfullscreen="allowfullscreen" allowpaymentrequest frameborder="0"></iframe>
 +</html></WRAP>
 +
 +===== JS インタフェース =====
 +ソースコード: [[git>pfalstad/circuitjs1/blob/master/war/jsinterface.html|]]\\
 +<WRAP circuitjs><html>
 +  <iframe id="circuitFrame" width=800 height=550 src="/circuit/circuitjs.html?hideMenu=true&running=false&startCircuit=jsinterface.txt"></iframe>
 +<p>JavaScript インターフェースの例</p>
 +<p>
 +iframe で実行されているシミュレーターと連携する JavaScript コードを作成できます。
 +シミュレータ コードは同じ Web サイト上でホストされています (同じ起源を持っています)。 あなたのコードは回路のリストを取得できます
 +要素を取得し、各要素に関する情報 (各ノードの電圧や 2 端子要素の電流など) を取得します。
 +外部電圧ノードの電圧を設定します。
 +</p>
 +<p>
 +<button onclick="sim.setSimRunning(true)">スタート</button>
 +<button onclick="sim.setSimRunning(false)">ストップ</button>
 +<button onclick="sim.setMaxTimeStep(sim.getMaxTimeStep()*2)">ダブル タイムステップ</button>
 +<button onclick="sim.setMaxTimeStep(sim.getMaxTimeStep()/2)">半分のタイムステップ</button>
 +</p>
 +<p>
 +extsin frequency:
 +<input id="freq" value="10" />
 +<br>
 +extsin amplitude:
 +<input id="ampl" value="10" />
 +</p>
 +<div id="info"></div>
 +
 +<script>
 +
 +// get iframe the simulator is running in.  Must have same origin as this file!
 +var iframe = document.getElementById("circuitFrame");
 +
 +var sim;
 +var freq, ampl;
 +var elmList = [];
 +
 +function round(x) {
 +  return Math.round(x*1000)/1000;
 +}
 +
 +// called when simulator updates its display
 +function didUpdate(sim) {
 +  var info = document.getElementById("info");
 +  info.innerHTML = "time = " + round(sim.getTime()) + "<br>running = " + sim.isRunning();
 +
 +  // get voltage of labeled node "vsense"
 +  var vsense = sim.getNodeVoltage("vsense");
 +  info.innerHTML += "<br>V(vsense) = " + round(vsense);
 +
 +  freq = parseFloat(document.getElementById("freq").value);
 +  ampl = parseFloat(document.getElementById("ampl").value);
 +
 +  var bstr = "";
 +  var bval = 0;
 +  var i;
 +  for (i = 7; i >= 0; i--) {
 +    var v = sim.getNodeVoltage("D" + i);
 +    if (v > 2.5) {
 +      bstr += "1";
 +      bval = 2*bval+1;
 +    } else {
 +      bstr += "0";
 +      bval = 2*bval;
 +    }
 +  }
 +  info.innerHTML += "<br>counter value = <tt>" + bstr + "</tt> = " + bval;
 +
 +  var rcount = 0;
 +
 +  // go through list of elements
 +  for (const elm of elmList) {
 +    if (elm.getType() == "ResistorElm") {
 +      // show info about each resistor
 +      rcount++;
 +      info.innerHTML += "<br>resistor " + rcount + " voltage diff = " + round(elm.getVoltageDiff());
 +      info.innerHTML += "<br>resistor " + rcount + " current = " + round(elm.getCurrent() * 1000) + " mA";
 +    } else if (elm.getType() == "LabeledNodeElm") {
 +      // show voltage of each labeled node
 +      info.innerHTML += "<br>V(" + elm.getLabelName() + ") = " + round(elm.getVoltage(0));
 +    }
 +  }
 +}
 +
 +// called when simulator analyzes a circuit (when a circuit is loaded or edited)
 +function didAnalyze(sim) {
 +  console.log("analyzed circuit");
 +
 +  // get the list of elements
 +  elmList = sim.getElements();
 +
 +  // log some info about each one
 +  for (const elm of elmList) {
 +    console.log("elm " + elm.getType() + ", " + elm.getPostCount() + " posts");
 +    console.log("elm info: " + elm.getInfo());
 +  }
 +}
 +
 +// 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 "extsin"
 +  sim.setExtVoltage("extsin", ampl*Math.sin(freq*Math.PI*2*t));
 +}
 +
 +// 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;
 +
 +</script>
 +</html></WRAP>
 +
 +===== 参考文献 =====
 +
 +==== 付録 ====
 +[[tw>tomoyan596sp/status/1817734605568610336|CircuitJSのJSインタフェースは、通常プログラムを同一サイトに配置しないと、iframeのリソースをJSで弄くり回すとブラウザがCORSのエラーを吐いて🤮動作しない😥 CORSの問題をどう回避はするのか❓😅 Apacheの.htaccessにRewriteルールを書いて、リバースプロキシで本家をサイトに埋め込む...😅]]\\
 +
 +==== 退避場 ====
 +[[https://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxAUgoqoQFMBaMMAKAGcQGAWPK7wrpy7YUQsISjgQAMwCGAGzZ0W2QniEDO2BKP6CG2PIIhUAKgAVxKtVtVadtiQaNSz5wtfUM0X7bp9aLiYgFlyenGBc+n4RUYHGkhbY4Qy89rppzgluKCwA5kK+Dga62HZUkCwASpwIcQw6XggYTgiEFZJcVNjQ2JIV0AgsAO6O6VpoWjaVowaQ0TZz+lziUCmYpcUb8a4h5kOzXJoGxVG+0yNCIlNeZzdrHNyr3ni3zygoglQQcorKjzE9Fp5mIJB1fkpLiddEdlplYWtDvDjggwDDNDNamiNPo2nwVmCoXjQbV2pwPl8oV0+IDqcDKbMyhJnoZjITDu9PqS+BTEeT8OMmMRShdZmAWvcmBKnuzYtFimjzupMUwUEqItiDBdHuKnASImqcf0ZApIY94Sz0V9JBDlGLNfrUvjVirFUaSkaVdcgfiMZdfYIeCTKgC7C9fGHed8TX92LVDUKrRFhZIfqb-vGvMwk0xsdHbXGZeA9c8g-n04WmcWxtxlVIC481VmU94uYnUzGzeTXhr-G3sx2C4yw7hopGe17Jq39E3k6IVUHoSBFzEF4uB0WnXyt0uPUtt97RxEnEevZG2yIeVyz05eVqvFGoXeN2AWwOVcdXxkeQKVbP2+Gx4VFCX5Ad2WZkpiK4OCuIIqnU+jiHwCFztuoG5rooEulCn5vk4oELt6bpZJwaTwWSTD1MS07bnSAEIu2hGYQmwiYXEC6fg6655kSFGRMsRHsVCrKkTSQSyrBgbNvOVJwKh97kteLBoOQAFIfJoHGMpkCqdBMK+C4WkqVimEUTwfDqYI2AAOTaap-4bv+aRWbZxmbvCi7ORQdnkhgmz+F04yCEMbl0YCqhFKIgh4D57bPOpqzRVSzwWnqyqxcSzwICmiUgDFHLMq0ZLYcZi76qly4gDZsURYKtUkYIGCFiyIKSYOFb1ZkAQ7p80ZuMwzX4Sm64puWsZuZktKRZVuQTRZLFZoagizTpongb263GJUABOhTIS2qK6MS3zwDttRUQmh3cqmp35CZnDtE0mrZfOB7FI9kofQumQvUIxBOF9wlTvVR4KX+fmCts+6ui29W6vcHH6B93CLoDsxXQwyNcP9D2-rFDG0jjJRUIIACWAB2pMAC5WG5Va7iDkxk5TVMeG5UPhSCxOVRT1Mhat3gCruvUTCTIC81TYRufxgrw9zzPU8kbkY9RGPYxICs02zAthach5MyAAAOwzbRlF1NNK6uVcbpu7dw3q-UCDSQcg8D4yiZnHFbmseHbIkNC2jrHa7cAsH7YaO-VwdgLdoVZWZpY45r-OqVHFH1d74ss1LAuXtd3PcEnWeK2H60B6UU7R7ddtWw0LEex0MduzXi6NCSzuN9XQhyXX6odzdzeCm3BdV27BRO1jKKjWs4+OljWXT5U4-1cjUeL3dBer5X6+HKjQusbUo3JQD+892j3d8KvLjl29uirxHR+MlOq9c+f+6Y0L-6-fB5t-a0hoLiJsPO4vdaKtxYj3NuC5IEJkBFAlIusYQ9xEsEcwAB1Ko+UNqbg3LVJikoD5Fh-ohA6CYCK8W+EVCyPFZgOQog5IStCeyUTHE4HGN5Cg1nYcJEcXMOZwRAm+IRAVgK0LaPSeSIsFwtWWO8Ccx8JHcGQQI9mEN+7eDUZnCWuQ7Yixvhoo6Lsm6hz9lzYeUNR6h3HlDZGFid6+Tvp-cRH90piJPg+QKN8vRmNgcUeBc1ZaajzprHR51ELPTIXmcAFDsEoQwmsXR-YWzdQItE2hQt0KZMfg4xRKBnGnlLqApgFEMbqW+ESeo6killJYAAe2oNcEmkBiDqBQIMKA0BgiiCQH0CwuR6lWVel0FpIA2lIBgF0yqvTzDJHqX0Rpy5mmtPaRMyQoh5l7DCPUmOVUhlLNGSszpazkBVT2EMep6y9kjLGR0yZ6y9geG2bszo+ybmrKoKICA0yrBAA|ドアミラー😅(書きかけ)]]\\
  
  • javascript/circuitjs.1698613585.txt.gz
  • 最終更新: 2023/10/30 06:06
  • by ともやん