From d6cab701a91067304ece5b5274b23a6779980804 Mon Sep 17 00:00:00 2001 From: Casey_Nelson <91818705+CaseyNelson314@users.noreply.github.com> Date: Sat, 23 Dec 2023 23:00:46 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=E6=AC=A1=E5=85=83=E5=88=87=E3=82=8A?= =?UTF-8?q?=E6=9B=BF=E3=81=88=E3=82=B9=E3=82=A4=E3=83=83=E3=83=81=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index.html | 6 ++++++ app/script/main.js | 30 +++++++++++++++++++++------- app/static/github.png | Bin 8640 -> 0 bytes app/static/kagaku_genshi.png | Bin 0 -> 97076 bytes app/style/style.css | 2 +- app/style/toggle.css | 37 +++++++++++++++++++++++++++++++++++ 6 files changed, 67 insertions(+), 8 deletions(-) delete mode 100644 app/static/github.png create mode 100644 app/static/kagaku_genshi.png create mode 100644 app/style/toggle.css diff --git a/app/index.html b/app/index.html index 80cd168..f756ce2 100644 --- a/app/index.html +++ b/app/index.html @@ -4,12 +4,18 @@ EFSim + +
+
+ +
2D/3D
+
diff --git a/app/script/main.js b/app/script/main.js index 0918b4d..785209c 100644 --- a/app/script/main.js +++ b/app/script/main.js @@ -14,6 +14,18 @@ const renderer = CreateRenderer(document.getElementById("canvas")); const camera = CreateCamera(); const controls = CreateControls(camera, renderer); +// document +// .getElementById("dimension_toggle_switch") +// .addEventListener("change", (e) => { +// if (e.target.checked) { +// camera.position.set(0, 0, 100); +// camera.lookAt(0, 0, 0); +// } else { +// camera.position.set(100, 100, 100); +// camera.lookAt(0, 0, 0); +// } +// }); + // 自動回転の有無チェックイベント document .getElementById("checkbox_auto_rotate") @@ -46,8 +58,8 @@ const transControls = new TransformControls(camera, renderer.domElement); // 点電荷たち const point_charges = [ - new PointCharge(-0.00001, new THREE.Vector3(60, 0, 60)), - new PointCharge(0.0001, new THREE.Vector3(20, 60, 0)), + new PointCharge(0.00001, new THREE.Vector3(60, 0, 60)), + new PointCharge(-0.0001, new THREE.Vector3(20, 60, 0)), new PointCharge(+0.00001, new THREE.Vector3(-50, 0, 20)), new PointCharge(0.00005, new THREE.Vector3(20, 0, 0)), ]; @@ -73,7 +85,12 @@ for (const charge of point_charges) { } /// @param origin 始点 (PointCharge) -const CreateElectricLineGeometry = (origin_charge, vector, point_charges, length) => { +const CreateElectricLineGeometry = ( + origin_charge, + vector, + point_charges, + length +) => { const points = [origin_charge.pos.clone()]; const _origin = origin_charge.pos.clone(); _origin.add(vector); @@ -98,11 +115,10 @@ const CreateElectricLineGeometry = (origin_charge, vector, point_charges, length const line_material = new THREE.LineBasicMaterial({ color: 0x0000ff }); for (const point_charge of point_charges) { - for (var n_theta = 0; n_theta < 10; n_theta++) { for (var n_phi = 0; n_phi < 10; n_phi++) { - const theta = (Math.PI * 2) / 10 * n_theta; - const phi = (Math.PI * 2) / 10 * n_phi; + const theta = ((Math.PI * 2) / 10) * n_theta; + const phi = ((Math.PI * 2) / 10) * n_phi; const x = 5 * Math.sin(theta) * Math.cos(phi); const y = 5 * Math.sin(theta) * Math.sin(phi); const z = 5 * Math.cos(theta); @@ -112,7 +128,7 @@ for (const point_charge of point_charges) { point_charge, new THREE.Vector3(x, y, z), point_charges, - 500 + 1000 ), line_material ); diff --git a/app/static/github.png b/app/static/github.png deleted file mode 100644 index 9490ffc6d2e158b266f719d58365905c1c5060cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8640 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 diff --git a/app/static/kagaku_genshi.png b/app/static/kagaku_genshi.png new file mode 100644 index 0000000000000000000000000000000000000000..ce74e521ef6220018db1176e534617aff0d053e5 GIT binary patch literal 97076 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≷ZQ#8)30a7Qq(Ej{ULc(ubx) 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
@av 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 Z16JuLRjOAEFAo5iq5fP)xmwW*{y$~Uqz(W8 literal 0 HcmV?d00001 diff --git a/app/style/style.css b/app/style/style.css index 8f66685..359e7aa 100644 --- a/app/style/style.css +++ b/app/style/style.css @@ -25,4 +25,4 @@ input[type="checkbox"] { margin: 0 10px 0 0; -} +} \ No newline at end of file diff --git a/app/style/toggle.css b/app/style/toggle.css new file mode 100644 index 0000000..24aaf91 --- /dev/null +++ b/app/style/toggle.css @@ -0,0 +1,37 @@ +/* トグルボタン */ + +.dimension_toggle { + display: flex; + align-items: center; + position: relative; + width: auto; + height: 40px; + margin: 10px; + border-radius: 10px; + border: 2px solid #515862; + cursor: pointer; + overflow: hidden; + user-select: none; +} + +.dimension_toggle input { + display: none; +} + +.slider { + position: absolute; + width: 50%; + height: 100%; + border-radius: 8px 0 0 8px; + background-color: #64696f; + transition: 0.2s ease; + display: flex; + align-items: center; + justify-content: center; + color: #fff; +} + +.dimension_toggle:has(:checked) .slider { + border-radius: 0 8px 8px 0; + transform: translateX(100%); +} From 38282cabb77e837f48648b4e99ace5b6823d9f0e Mon Sep 17 00:00:00 2001 From: CaseyNelson Date: Sun, 24 Dec 2023 00:03:13 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=E6=AC=A1=E5=85=83=E5=88=87=E3=82=8A?= =?UTF-8?q?=E6=9B=BF=E3=81=88=E3=82=B9=E3=82=A4=E3=83=83=E3=83=81=E3=81=AB?= =?UTF-8?q?=E3=82=88=E3=81=A3=E3=81=A6=E3=82=B7=E3=83=BC=E3=83=B3=E3=81=AE?= =?UTF-8?q?=E3=82=AA=E3=83=96=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E5=89=8A=E9=99=A4=E3=82=92=E8=A1=8C=E3=81=86?= =?UTF-8?q?=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index.html | 6 +-- app/script/Field3D.js | 86 ++++++++++++++++++++++++++++++++++ app/script/main.js | 105 ++++++++---------------------------------- app/style/toggle.css | 4 +- 4 files changed, 111 insertions(+), 90 deletions(-) create mode 100644 app/script/Field3D.js diff --git a/app/index.html b/app/index.html index f756ce2..711918f 100644 --- a/app/index.html +++ b/app/index.html @@ -12,10 +12,10 @@
-
+
+
3D
+
diff --git a/app/script/Field3D.js b/app/script/Field3D.js new file mode 100644 index 0000000..69a28b8 --- /dev/null +++ b/app/script/Field3D.js @@ -0,0 +1,86 @@ +import * as THREE from "three"; +import PointCharge from "./PointCharge.js"; + +export class Field3D extends THREE.Group { + constructor(point_charges) { + super(); + this.field = this.createField(point_charges); + this.point_charges = point_charges; + } + + // 指定座標における電場ベクトルを計算 + posToElectricFieldVector = (pos, point_charges) => { + var electric_field_vector = new THREE.Vector3(0, 0, 0); // 合成ベクトル + for (const point_charge of point_charges) { + const diff = new THREE.Vector3(0, 0, 0); + diff.subVectors(pos, point_charge.pos); // 点電荷と観測点との差分ベクトル + + const r_sq = diff.lengthSq(); // 点電荷と観測点との距離^2 (平方根処理をなくすため) + const k = 8.987552 * 10 ** 9; // クーロン定数 + + const factor = r_sq ? (k * point_charge.charge) / r_sq ** 2 : 0; // ベクトルにかける係数 + + diff.multiplyScalar(factor); + + electric_field_vector.add(diff); + } + return electric_field_vector; + }; + + /// @param origin 始点 (PointCharge) + createElectricLineGeometry = ( + origin_charge, + vector, + point_charges, + length + ) => { + const points = [origin_charge.pos.clone()]; + const _origin = origin_charge.pos.clone(); + _origin.add(vector); + for (var i = 0; i < length; i++) { + const d_vector = this.posToElectricFieldVector(_origin, point_charges); + d_vector.normalize(); + if (origin_charge.charge < 0) d_vector.multiplyScalar(-1); + // 点電荷との衝突判定 + for (const point_charge of point_charges) { + const diff = new THREE.Vector3(0, 0, 0); + diff.subVectors(_origin, point_charge.pos); + if (diff.length() < 1) { + console.log("hit"); + return new THREE.BufferGeometry().setFromPoints(points); + } + } + _origin.add(d_vector); + points.push(_origin.clone()); + } + return new THREE.BufferGeometry().setFromPoints(points); + }; + + createField(point_charges) { + const line_material = new THREE.LineBasicMaterial({ color: 0xaaaaff }); + for (const point_charge of point_charges) { + for (var n_theta = 0; n_theta < 5; n_theta++) { + for (var n_phi = 0; n_phi < 5; n_phi++) { + const theta = ((Math.PI * 2) / 5) * n_theta; + const phi = ((Math.PI * 2) / 5) * n_phi; + const x = 5 * Math.sin(theta) * Math.cos(phi); + const y = 5 * Math.sin(theta) * Math.sin(phi); + const z = 5 * Math.cos(theta); + + const line = new THREE.Line( + this.createElectricLineGeometry( + point_charge, + new THREE.Vector3(x, y, z), + point_charges, + 1000 + ), + line_material + ); + this.add(line); + } + } + } + return; + } + update() {} +} diff --git a/app/script/main.js b/app/script/main.js index 785209c..e97ab28 100644 --- a/app/script/main.js +++ b/app/script/main.js @@ -1,6 +1,7 @@ import * as THREE from "three"; import { TransformControls } from "three/addons/controls/TransformControls"; import PointCharge from "./PointCharge.js"; +import { Field3D } from "./Field3D.js"; import { CreateScene, @@ -14,18 +15,6 @@ const renderer = CreateRenderer(document.getElementById("canvas")); const camera = CreateCamera(); const controls = CreateControls(camera, renderer); -// document -// .getElementById("dimension_toggle_switch") -// .addEventListener("change", (e) => { -// if (e.target.checked) { -// camera.position.set(0, 0, 100); -// camera.lookAt(0, 0, 0); -// } else { -// camera.position.set(100, 100, 100); -// camera.lookAt(0, 0, 0); -// } -// }); - // 自動回転の有無チェックイベント document .getElementById("checkbox_auto_rotate") @@ -33,25 +22,6 @@ document controls.autoRotate = e.target.checked; }); -// 指定座標における電場ベクトルを計算 -const PosToElectricFieldVector = (pos, point_charges) => { - var electric_field_vector = new THREE.Vector3(0, 0, 0); // 合成ベクトル - for (const point_charge of point_charges) { - const diff = new THREE.Vector3(0, 0, 0); - diff.subVectors(pos, point_charge.pos); // 点電荷と観測点との差分ベクトル - - const r_sq = diff.lengthSq(); // 点電荷と観測点との距離^2 (平方根処理をなくすため) - const k = 8.987552 * 10 ** 9; // クーロン定数 - - const factor = r_sq ? (k * point_charge.charge) / r_sq ** 2 : 0; // ベクトルにかける係数 - - diff.multiplyScalar(factor); - - electric_field_vector.add(diff); - } - return electric_field_vector; -}; - // オブジェクトコントローラー const transControls = new TransformControls(camera, renderer.domElement); // scene.add(transControls); @@ -64,6 +34,24 @@ const point_charges = [ new PointCharge(0.00005, new THREE.Vector3(20, 0, 0)), ]; +const field_3d = new Field3D(point_charges); +scene.add(field_3d); + +// 2D/3D切り替え +document + .getElementById("dimension_toggle_switch") + .addEventListener("change", (e) => { + if (e.target.checked) { + // 2D + document.getElementById("dimension_toggle_slider").textContent = "2D"; + scene.remove(field_3d); + } else { + // 3D + document.getElementById("dimension_toggle_slider").textContent = "3D"; + scene.add(field_3d); + } + }); + // 球 const sphereGeometry = new THREE.SphereGeometry(1, 32, 32); const sphereMaterialRed = new THREE.MeshBasicMaterial( @@ -84,59 +72,6 @@ for (const charge of point_charges) { // transControls.attach(mesh); } -/// @param origin 始点 (PointCharge) -const CreateElectricLineGeometry = ( - origin_charge, - vector, - point_charges, - length -) => { - const points = [origin_charge.pos.clone()]; - const _origin = origin_charge.pos.clone(); - _origin.add(vector); - for (var i = 0; i < length; i++) { - const d_vector = PosToElectricFieldVector(_origin, point_charges); - d_vector.normalize(); - if (origin_charge.charge < 0) d_vector.multiplyScalar(-1); - // 点電荷との衝突判定 - for (const point_charge of point_charges) { - const diff = new THREE.Vector3(0, 0, 0); - diff.subVectors(_origin, point_charge.pos); - if (diff.length() < 1) { - console.log("hit"); - return new THREE.BufferGeometry().setFromPoints(points); - } - } - _origin.add(d_vector); - points.push(_origin.clone()); - } - return new THREE.BufferGeometry().setFromPoints(points); -}; - -const line_material = new THREE.LineBasicMaterial({ color: 0x0000ff }); -for (const point_charge of point_charges) { - for (var n_theta = 0; n_theta < 10; n_theta++) { - for (var n_phi = 0; n_phi < 10; n_phi++) { - const theta = ((Math.PI * 2) / 10) * n_theta; - const phi = ((Math.PI * 2) / 10) * n_phi; - const x = 5 * Math.sin(theta) * Math.cos(phi); - const y = 5 * Math.sin(theta) * Math.sin(phi); - const z = 5 * Math.cos(theta); - - const line = new THREE.Line( - CreateElectricLineGeometry( - point_charge, - new THREE.Vector3(x, y, z), - point_charges, - 1000 - ), - line_material - ); - scene.add(line); - } - } -} - const CreateElectricFieldVector = () => { var arrows = []; for (var point_charge of point_charges) { @@ -147,7 +82,7 @@ const CreateElectricFieldVector = () => { if (x === 0 && y === 0 && z === 0) continue; const origin = new THREE.Vector3(x * 5, y * 5, z * 5); origin.add(point_charge.pos); - const electric_field_vector = PosToElectricFieldVector( + const electric_field_vector = field_3d.posToElectricFieldVector( origin, point_charges ); diff --git a/app/style/toggle.css b/app/style/toggle.css index 24aaf91..1d07bef 100644 --- a/app/style/toggle.css +++ b/app/style/toggle.css @@ -18,7 +18,7 @@ display: none; } -.slider { +#dimension_toggle_slider { position: absolute; width: 50%; height: 100%; @@ -31,7 +31,7 @@ color: #fff; } -.dimension_toggle:has(:checked) .slider { +.dimension_toggle:has(:checked) #dimension_toggle_slider { border-radius: 0 8px 8px 0; transform: translateX(100%); } From bcb37e2b630a0520d04cd64516d9f701591aba0d Mon Sep 17 00:00:00 2001 From: CaseyNelson Date: Sun, 24 Dec 2023 00:07:45 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=E3=83=81=E3=82=A7=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=83=9C=E3=83=83=E3=82=AF=E3=82=B9=E3=81=AECSS/HTML=E3=82=92?= =?UTF-8?q?=E6=94=B9=E8=89=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index.html | 16 ++++++++++------ app/script/Init.js | 2 +- app/style/style.css | 3 +-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/index.html b/app/index.html index 711918f..8fea376 100644 --- a/app/index.html +++ b/app/index.html @@ -16,14 +16,18 @@
3D
-
+
-
+ 自動回転 + + +
+ 電気力線 +
diff --git a/app/script/Init.js b/app/script/Init.js index a7e412c..2d505fa 100644 --- a/app/script/Init.js +++ b/app/script/Init.js @@ -51,7 +51,7 @@ export const CreateControls = (camera, renderer) => { controls.autoRotate = true; // 自動回転 controls.autoRotateSpeed = 1; // 自動回転の速度 controls.enableDamping = true; // 視点の移動を滑らかにする - controls.dampingFactor = 0.5; // 滑らか度合い + controls.dampingFactor = 0.2; // 滑らか度合い return controls; }; diff --git a/app/style/style.css b/app/style/style.css index 359e7aa..a052238 100644 --- a/app/style/style.css +++ b/app/style/style.css @@ -13,8 +13,7 @@ height: 100%; } -.enable_auto_rotate, -.enable_electric_field_vectors { +.checkbox { display: flex; margin: 10px; padding: 10px; From 7aafd9b054a7034faa1491014794dd023908891f Mon Sep 17 00:00:00 2001 From: CaseyNelson Date: Sun, 24 Dec 2023 01:45:46 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=B0=E3=83=A9?= =?UTF-8?q?=E3=83=A0=E3=82=92=E6=95=B4=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/index.html | 38 +++++---- app/script/Field3D.js | 147 +++++++++++++++++++++++++++------ app/script/Init.js | 18 +++- app/script/main.js | 187 ++++++++++++------------------------------ app/style/toggle.css | 2 +- 5 files changed, 216 insertions(+), 176 deletions(-) diff --git a/app/index.html b/app/index.html index 8fea376..9fa606b 100644 --- a/app/index.html +++ b/app/index.html @@ -13,22 +13,32 @@
- - - -
+ +
+ + + +
diff --git a/app/script/Field3D.js b/app/script/Field3D.js index 69a28b8..67762e0 100644 --- a/app/script/Field3D.js +++ b/app/script/Field3D.js @@ -1,31 +1,32 @@ import * as THREE from "three"; import PointCharge from "./PointCharge.js"; -export class Field3D extends THREE.Group { - constructor(point_charges) { - super(); - this.field = this.createField(point_charges); - this.point_charges = point_charges; - } +// 指定座標における電場ベクトルを計算 +export const PosToElectricFieldVector = (pos, point_charges) => { + var electric_field_vector = new THREE.Vector3(0, 0, 0); // 合成ベクトル + for (const point_charge of point_charges) { + const diff = new THREE.Vector3(0, 0, 0); + diff.subVectors(pos, point_charge.pos); // 点電荷と観測点との差分ベクトル - // 指定座標における電場ベクトルを計算 - posToElectricFieldVector = (pos, point_charges) => { - var electric_field_vector = new THREE.Vector3(0, 0, 0); // 合成ベクトル - for (const point_charge of point_charges) { - const diff = new THREE.Vector3(0, 0, 0); - diff.subVectors(pos, point_charge.pos); // 点電荷と観測点との差分ベクトル + const r_sq = diff.lengthSq(); // 点電荷と観測点との距離^2 (平方根処理をなくすため) + const k = 8.987552 * 10 ** 9; // クーロン定数 - const r_sq = diff.lengthSq(); // 点電荷と観測点との距離^2 (平方根処理をなくすため) - const k = 8.987552 * 10 ** 9; // クーロン定数 + const factor = r_sq ? (k * point_charge.charge) / r_sq ** 2 : 0; // ベクトルにかける係数 - const factor = r_sq ? (k * point_charge.charge) / r_sq ** 2 : 0; // ベクトルにかける係数 + diff.multiplyScalar(factor); - diff.multiplyScalar(factor); + electric_field_vector.add(diff); + } + return electric_field_vector; +}; - electric_field_vector.add(diff); - } - return electric_field_vector; - }; +/// 電気力線 +class ElectricLines3D extends THREE.Group { + constructor(point_charges) { + super(); + this.point_charges = point_charges; + this.createField(point_charges); + } /// @param origin 始点 (PointCharge) createElectricLineGeometry = ( @@ -38,7 +39,7 @@ export class Field3D extends THREE.Group { const _origin = origin_charge.pos.clone(); _origin.add(vector); for (var i = 0; i < length; i++) { - const d_vector = this.posToElectricFieldVector(_origin, point_charges); + const d_vector = PosToElectricFieldVector(_origin, point_charges); d_vector.normalize(); if (origin_charge.charge < 0) d_vector.multiplyScalar(-1); // 点電荷との衝突判定 @@ -46,7 +47,6 @@ export class Field3D extends THREE.Group { const diff = new THREE.Vector3(0, 0, 0); diff.subVectors(_origin, point_charge.pos); if (diff.length() < 1) { - console.log("hit"); return new THREE.BufferGeometry().setFromPoints(points); } } @@ -80,7 +80,106 @@ export class Field3D extends THREE.Group { } } } - return; } - update() {} +} + +// 点電荷 +class PointCharges3D extends THREE.Group { + constructor(point_charges) { + super(); + const geometry = new THREE.SphereGeometry(1, 32, 32); + const material_minus = new THREE.MeshBasicMaterial({ color: 0x0000ff }); + const material_plus = new THREE.MeshBasicMaterial({ color: 0xff0000 }); + for (const point_charge of point_charges) { + const material = point_charge.charge > 0 ? material_plus : material_minus; + const sphere = new THREE.Mesh(geometry, material); + sphere.position.copy(point_charge.pos); + this.add(sphere); + } + } +} + +// 電界ベクトル +class ElectricFieldVectors3D extends THREE.Group { + constructor(point_charges) { + super(); + this.point_charges = point_charges; + + for (var point_charge of point_charges) { + for (var x = -4; x <= 4; x++) { + for (var y = -4; y <= 4; y++) { + for (var z = -4; z <= 4; z++) { + if (x ** 2 + y ** 2 + z ** 2 > 5 ** 2) continue; + if (x === 0 && y === 0 && z === 0) continue; + const origin = new THREE.Vector3(x * 10, y * 10, z * 10); + origin.add(point_charge.pos); + const electric_field_vector = PosToElectricFieldVector( + origin, + point_charges + ); + + const len = electric_field_vector.length(); + this.add( + new THREE.ArrowHelper( + electric_field_vector.normalize(), + origin, + 1, + 0xffffff, + 2, + 0.5 + ) + ); + } + } + } + } + } +} + +/// 電界 +export class Field3D extends THREE.Group { + constructor(point_charges) { + super(); + this.point_charges = point_charges; + this.enablePointCharges(true); + } + + point_charges_3d = null; + electric_lines_3d = null; + electric_field_vectors_3d = null; + + /// 点電荷の表示切替 + enablePointCharges = (enable) => { + if (enable) { + if (this.point_charges_3d == null) + this.point_charges_3d = new PointCharges3D(this.point_charges); + this.add(this.point_charges_3d); + } else { + this.remove(this.point_charges_3d); + } + }; + + /// 電気力線の表示切替 + enableElectricLines = (enable) => { + if (enable) { + if (this.electric_lines_3d == null) + this.electric_lines_3d = new ElectricLines3D(this.point_charges); + this.add(this.electric_lines_3d); + } else { + this.remove(this.electric_lines_3d); + } + }; + + /// 電界ベクトルの表示切替 + enableElectricFieldVectors = (enable) => { + if (enable) { + if (this.electric_field_vectors_3d == null) + this.electric_field_vectors_3d = new ElectricFieldVectors3D( + this.point_charges + ); + this.add(this.electric_field_vectors_3d); + } else { + this.remove(this.electric_field_vectors_3d); + } + }; } diff --git a/app/script/Init.js b/app/script/Init.js index 2d505fa..e2a3bb4 100644 --- a/app/script/Init.js +++ b/app/script/Init.js @@ -1,5 +1,6 @@ import * as THREE from "three"; import { OrbitControls } from "three/addons/controls/OrbitControls.js"; +import { TransformControls } from "three/addons/controls/TransformControls"; // シーンを作成 export const CreateScene = () => { @@ -45,8 +46,8 @@ export const CreateCamera = () => { }; // マウスコントロールを作成 -export const CreateControls = (camera, renderer) => { - const controls = new OrbitControls(camera, renderer.domElement); +export const CreateControls = (camera, dom) => { + const controls = new OrbitControls(camera, dom); controls.autoRotate = true; // 自動回転 controls.autoRotateSpeed = 1; // 自動回転の速度 @@ -55,3 +56,16 @@ export const CreateControls = (camera, renderer) => { return controls; }; + +export const CreateTransformControls = (camera, dom, controls, scene) => { + const transControls = new TransformControls(camera, dom); + + transControls.addEventListener("dragging-changed", (event) => { + controls.enablePan = !event.value; + controls.enableRotate = !event.value; + }); + + scene.add(transControls); + + return transControls; +}; \ No newline at end of file diff --git a/app/script/main.js b/app/script/main.js index e97ab28..e0a04b3 100644 --- a/app/script/main.js +++ b/app/script/main.js @@ -1,30 +1,22 @@ import * as THREE from "three"; -import { TransformControls } from "three/addons/controls/TransformControls"; +import * as EFSim from "./Init.js"; import PointCharge from "./PointCharge.js"; import { Field3D } from "./Field3D.js"; -import { - CreateScene, - CreateRenderer, - CreateCamera, - CreateControls, -} from "./Init.js"; +const scene = EFSim.CreateScene(); +const renderer = EFSim.CreateRenderer(document.getElementById("canvas")); +const camera = EFSim.CreateCamera(); -const scene = CreateScene(); -const renderer = CreateRenderer(document.getElementById("canvas")); -const camera = CreateCamera(); -const controls = CreateControls(camera, renderer); +// マウスコントロール +const controls = EFSim.CreateControls(camera, renderer.domElement); -// 自動回転の有無チェックイベント -document - .getElementById("checkbox_auto_rotate") - .addEventListener("change", (e) => { - controls.autoRotate = e.target.checked; - }); - -// オブジェクトコントローラー -const transControls = new TransformControls(camera, renderer.domElement); -// scene.add(transControls); +// ドラッグでオブジェクトを移動するためのコントロール +const transControls = EFSim.CreateTransformControls( + camera, + renderer.domElement, + controls, + scene +); // 点電荷たち const point_charges = [ @@ -35,129 +27,54 @@ const point_charges = [ ]; const field_3d = new Field3D(point_charges); -scene.add(field_3d); -// 2D/3D切り替え -document - .getElementById("dimension_toggle_switch") - .addEventListener("change", (e) => { - if (e.target.checked) { - // 2D - document.getElementById("dimension_toggle_slider").textContent = "2D"; - scene.remove(field_3d); - } else { - // 3D - document.getElementById("dimension_toggle_slider").textContent = "3D"; - scene.add(field_3d); - } +// 自動回転切り替え +{ + const dom_switch = document.getElementById("checkbox_auto_rotate"); + controls.autoRotate = dom_switch.checked; // 初期値 + dom_switch.addEventListener("change", (e) => { + controls.autoRotate = e.target.checked; }); - -// 球 -const sphereGeometry = new THREE.SphereGeometry(1, 32, 32); -const sphereMaterialRed = new THREE.MeshBasicMaterial( - { color: 0xdd5555, wireframe: false }, - new THREE.MeshStandardMaterial() -); -const sphereMaterialBlue = new THREE.MeshBasicMaterial( - { color: 0x5555dd, wireframe: false }, - new THREE.MeshStandardMaterial() -); -for (const charge of point_charges) { - const mesh = new THREE.Mesh( - sphereGeometry, - charge.charge > 0 ? sphereMaterialRed : sphereMaterialBlue - ); - mesh.position.copy(charge.pos); - scene.add(mesh); - // transControls.attach(mesh); } -const CreateElectricFieldVector = () => { - var arrows = []; - for (var point_charge of point_charges) { - for (var x = -5; x <= 5; x++) { - for (var y = -5; y <= 5; y++) { - for (var z = -5; z <= 5; z++) { - if (x ** 2 + y ** 2 + z ** 2 > 5 ** 2) continue; - if (x === 0 && y === 0 && z === 0) continue; - const origin = new THREE.Vector3(x * 5, y * 5, z * 5); - origin.add(point_charge.pos); - const electric_field_vector = field_3d.posToElectricFieldVector( - origin, - point_charges - ); - - const len = electric_field_vector.length(); - arrows.push( - new THREE.ArrowHelper( - electric_field_vector.normalize(), - origin, - 1, - 0xffffff, - 2, - 0.5 - ) - ); - } - } - } - } - return arrows; -}; - -var arrows = CreateElectricFieldVector(); - -document - .getElementById("checkbox_electric_field_vectors") - .addEventListener("change", (e) => { - if (e.target.checked) { - for (const arrow of arrows) { - scene.add(arrow); - } +// 2D/3D切り替え +{ + const dom_switch = document.getElementById("dimension_toggle_switch"); + const dom_slider = document.getElementById("dimension_toggle_slider"); + const ChangeDimension = (is_3d) => { + if (is_3d) { + dom_slider.textContent = "3D"; + scene.add(field_3d); + transControls.attach(field_3d); } else { - for (const arrow of arrows) { - scene.remove(arrow); - } + dom_slider.textContent = "2D"; + scene.remove(field_3d); + transControls.detach(field_3d); } + }; + ChangeDimension(dom_switch.checked); // 初期値 + dom_switch.addEventListener("change", (e) => { + ChangeDimension(e.target.checked); }); +} -transControls.addEventListener("mouseDown", () => { - // オブジェクト操作時、OrbitControls無効化 - controls.enablePan = false; - controls.enableRotate = false; -}); - -transControls.addEventListener("mouseUp", () => { - // オブジェクト操作解除時、OrbitControls有効化 - controls.enablePan = true; - controls.enableRotate = true; -}); - -transControls.addEventListener("change", () => { - // オブジェクト操作解除時、OrbitControls有効化 - if (document.getElementById("checkbox_electric_field_vectors").checked) { - // for (const arrow of arrows) { - // scene.remove(arrow); - // } - // arrows = CreateElectricFieldVector(); - // for (const arrow of arrows) { - // scene.add(arrow); - // } - } -}); - -// 座表軸 -// scene.add(new THREE.AxesHelper()); +// 電気力線 表示/非表示 +{ + const checkbox = document.getElementById("checkbox_electric_lines"); + field_3d.enableElectricLines(checkbox.checked); // 初期値 + checkbox.addEventListener("change", (e) => { + field_3d.enableElectricLines(e.target.checked); + }); +} -// 床 -const meshFloor = new THREE.Mesh( - new THREE.BoxGeometry(100, 0.0001, 100), - new THREE.MeshBasicMaterial( - { color: 0x555555 }, - new THREE.MeshStandardMaterial() - ) -); -// scene.add(meshFloor); +// 電界ベクトル 表示/非表示 +{ + const checkbox = document.getElementById("checkbox_electric_field_vectors"); + field_3d.enableElectricFieldVectors(checkbox.checked); // 初期値 + checkbox.addEventListener("change", (e) => { + field_3d.enableElectricFieldVectors(e.target.checked); + }); +} // エントリーポイント const main = () => { diff --git a/app/style/toggle.css b/app/style/toggle.css index 1d07bef..3384c7f 100644 --- a/app/style/toggle.css +++ b/app/style/toggle.css @@ -6,7 +6,7 @@ position: relative; width: auto; height: 40px; - margin: 10px; + margin: 20px; border-radius: 10px; border: 2px solid #515862; cursor: pointer; From fb18941921cd52a69901f80103401c7512f3ea13 Mon Sep 17 00:00:00 2001 From: CaseyNelson Date: Sun, 24 Dec 2023 01:48:01 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=E3=82=AA=E3=83=96=E3=82=B8=E3=82=A7?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=82=B3=E3=83=B3=E3=83=88=E3=83=AD=E3=83=BC?= =?UTF-8?q?=E3=83=AB=E3=81=95=E9=A7=86=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/script/main.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/script/main.js b/app/script/main.js index e0a04b3..3e2ff76 100644 --- a/app/script/main.js +++ b/app/script/main.js @@ -45,11 +45,11 @@ const field_3d = new Field3D(point_charges); if (is_3d) { dom_slider.textContent = "3D"; scene.add(field_3d); - transControls.attach(field_3d); + // transControls.attach(field_3d); } else { dom_slider.textContent = "2D"; scene.remove(field_3d); - transControls.detach(field_3d); + // transControls.detach(field_3d); } }; ChangeDimension(dom_switch.checked); // 初期値