Skip to content

README‐Japanese

NAS6mixfoolv edited this page Sep 14, 2026 · 14 revisions

image of banner

NAS6LIB: JavaScript 物理エンジンと堅牢な数学ライブラリ


支援する


特徴

  • 水星の近日点進動を99.9%以上の精度で再現
  • 2.5PN項を含む相対論効果の検証可能

NAS6 によるプログラミング - nas6.net

NAS6LIB は、物理シミュレーション と 幾何学的変換 のための包括的な JavaScript ライブラリです。
元々はゲーム開発におけるリアルタイム 3D グラフィックス向けに開発されました。
基本的な線形代数演算を高度に最適化し、数値的に安定した実装を提供します。

主な特徴は、高度な 相対論的重力多体問題シミュレータ を備えており、水星の近日点通過などの複雑な軌道力学を再現できます。

動作環境 (オプション)

NAS6LIB は主要なブラウザ環境で動作します。
現在、以下のライブラリは必須ではありませんが、オプションとして動作を確認しています。
jQuery 3.7.1
x3dom 1.8.3
ThreeJS R177

関連ファイルは順次更新されます。


NAS6LIB でできること

NAS6LIB で数値計算を行い、描画は既存の 3D ライブラリに任せることで、
このようなグラフィカルなページを作成できます。

太陽系の gif
太陽系シミュレーション (太陽系シミュレーション)
【太陽系シミュレーションDEMO】(https://nas6.net/solarsystem.htm)

衛星軌道の gif
衛星軌道シミュレーション (衛星軌道シミュレーション)
衛星軌道シミュレーション DEMO

フレネルのgif
フレネル効果 (Fresnel Effect)
フレネル効果デモ


wiki

デモ

NAS6LIB の動作を体験してください:

自動テスト

リンク内の、
ijkl はテストする回転ベクトルです。
xyz は整合性を確認するオイラー角です。

Zipファイル リンク

NAS6LIB_2_2_1 Zipファイル
SolarSystem デモ Zip ファイル
Satellite デモ Zip ファイル
シンプルテンプレート Zip ファイル
ThreeJS デモ Zip ファイル
自動テストによる有効性検証済み Zip ファイル
3D 回転テスト Zip ファイル


クイックスタート

1. ライブラリをロードする

NAS6LIB は 通常の <script> で読み込める静的版 を基本としています。
必要な JavaScript ファイルを HTML に含めてください。

<script src="https://nas6mixfoolv.github.io/NAS6LIB/javascripts/nas6lib/vector.js"></script>
<script src="https://nas6mixfoolv.github.io/NAS6LIB/javascripts/nas6lib/matrix.js"></script>
<script src="https://nas6mixfoolv.github.io/NAS6LIB/javascripts/nas6lib/quaternion.js"></script>
<script src="https://nas6mixfoolv.github.io/NAS6LIB/javascripts/nas6lib/planet.js"></script>

必要なユースケースに応じて、
vector.js, matrix.js, quaternion.js, planet.js などを追加してください。

ES Module 版について

もし ES Modules(import/export)で利用したい場合は、
同名の xxx.module.js を利用できます。

import { N6LVector } from "./vector.module.js";

注意:
多くの .module.js は「機械的に export を追加しただけ」の最小対応です。
そのため、モジュール化に向かない構造のファイルでは
不具合が出る可能性があります。
問題があれば issue や PR をいただければ助かります。 NAS6LIB は基本的に静的版(通常の <script>)で利用できます。
ES Modules 版は必要なものだけ段階的に対応しており、
すべてのライブラリが完全にモジュール化されているわけではありません。
モジュール版で動作しない場合は、静的版をご利用ください。

2. 最小サンプル (2D ベクトル加算)

簡単な JavaScript の例を以下に示します。

var v1 = new N6LVector([1, 2]);
var v2 = new N6LVector([3, 4]);
var v3 = v1.Add(v2);
console.log(v3.x); // 結果: [4, 6]

コア機能とモジュールの概要

NAS6LIB は、それぞれが特定の機能を提供する JavaScript モジュールのコレクションです。

vector.js: 2D、3D、N 次元計算のための基本的なベクトル演算を定義します。
matrix.js: 安定性とパフォーマンスを重視して設計されたコア行列演算が含まれています。
これには、同次座標(w パラメータを先頭とする)の独自の処理が含まれます。
quaternion.js: 回転を管理するための堅牢なクォータニオン演算を提供し、ジンバルロックなどの問題を回避するように設計されています。
rngkt.js: ルンゲ・クッタ法を実装します。これは常微分方程式を解くための強力な数値解析手法で、
物理シミュレーションでよく使用されます。
planet.js: ケプラー方程式の関数を備えており、軌道力学や天体シミュレーションに役立ちます。
masspoint.js: 物理シミュレーションなどで使われる、質点に関連する機能を実装します。
keyboard.js: インタラクティブアプリケーションのキーボード入力を管理し、高度なエイリアス管理と同時キー入力のサポートを提供します。
timer.js: 速度低下を引き起こすことなくメインループを効率的に実行し、シングルタスクのJavaScriptでマルチスレッドのような
フレームワークを実現するように設計されたタイマーマネージャーです。
hsv.js: HSV カラーモデルと RGB カラーモデル間の相互変換を処理します。
prime.js: 素数関連の計算用ユーティリティが含まれています。
common.js: 基本的なファイルダウンロードとユーティリティ関数を提供します。

要素順序

このライブラリのベクトルと行列の要素順序は wxyz です。この順序により、同次座標(例: 2 次元の wxy と 3 次元の wxyz)において、
要素長の均一性と可変長が可能になります。計算も同次座標に合わせて調整され、すべての要素が w 値で除算されて算術演算が行われます。
例えば、Matrix × ZeroVector([1,0,0,0],bHomo=true) は、行列の平行移動同次ベクトルを返します。

座標系

NAS6LIB のコアとなる数学的計算(ベクトル、行列など)は、左手座標系に基づいています。
これは、DirectX ゲーム開発におけるその起源を反映しています。他の 3D ライブラリ
(例えば、主に右手座標系を使用する Three.js のような WebGL ベースのライブラリ)と統合する場合は、
特に Z 軸に関して、潜在的な軸の違いに注意してください。

より詳細な解説と高度な詳細

主要なメソッドを含む詳細なクラスリスト、高度な相対論的軌道力学の公式、keyboard.js などのモジュールの具体的な使用例など、
より詳細な情報については、高度なドキュメントを参照してください。

NAS6LIB 高度なドキュメント
AdvancedReadMe

将来の展望

NAS6LIB のプロトタイプは、VC++ DirectX の航空戦闘ゲームから始まり、VB+VC#+XNA を経て、2016 年に現在の JavaScript
バージョンに引き継がれました。最初の開発は約 25 年前、2000 年頃に開始されました。将来的には、VC#+WASM として再び復活する可能性があります。

バージョン履歴

Programed by NAS6
note:NAS6LIB_1_2_0(2016/06/26):note:renewal
note:NAS6LIB_1_3_0(2016/07/29):note:add ./nas6lib/keyboard.js
note:NAS6LIB_1_4_0(2016/07/31):note:N6LMatrix.Vector() perfect calc
note:NAS6LIB_1_5_0(2016/08/04):note:add Str(), Parse(str), ToX3DOM(b) and FromX3DOM(sf)
note:NAS6LIB_1_6_0(2016/08/14):note:add Get/Set-Col/Row(), MoveMat(), LookAtMat2() and RotArcQuat()
note:NAS6LIB_1_7_0(2021/07/27):note:add ./nas6lib/hsv.js
note:NAS6LIB_1_8_0(2021/09/28):note:corrected to class description
note:NAS6LIB_1_9_0(2024/03/22):note:refine ToSchwartz()
note:NAS6LIB_1_9_1(2024/03/25):note:add GetEccentricity()
note:NAS6LIB_1_9_2(2024/04/09):note:add comment
note:NAS6LIB_2_0_0(2025/05/25):note:improved error handling
note:NAS6LIB_2_0_1(2025/05/26):note:Adaptation to the X3DOM environment
note:NAS6LIB_2_0_2(2025/06/08):note:N6LQuaternion bugfix
note:NAS6LIB_2_0_3(2025/06/10):note:N6LQuaternion & N6LLnQuaternion more bugfix
note:NAS6LIB_2_1_0(2025/06/11):note:add GetAccessor/Get/Set/Create
note:NAS6LIB_2_1_1(2025/06/14):note:refine Comp/Equal/EpsComp/EpsEqual
note:NAS6LIB_2_1_2(2025/06/17):note:Licensing arrangement
note:NAS6LIB_2_1_3(2025/10/11):note:N6LLnQuaternion bugfix
note:NAS6LIB_2_1_4(2025/11/04):note:N6LRngKt bugfix
note:NAS6LIB_2_1_5(2025/12/24):note:add clone()
note:NAS6LIB_2_1_6(2026/01/01):note:output log
note:NAS6LIB_2_1_7(2026/01/07):note:add ToGravityRadiationLoss()
note:NAS6LIB_2_1_8(2026/01/17):note:output log
note:NAS6LIB_2_2_0(2026/06/21):note:keplerWithAGM
note:NAS6LIB_2_2_1(2026/07/05):note:BugFix ToSchwartz, add timer.module.js, keyboard.module.js
note:NAS6LIB_2_2_2(2026/07/27):note:add ringbuffer.js, managedclass.js
note:NAS6LIB_2_2_3(2026/07/29):note:add date.js
note:NAS6LIB_2_2_4(2026/08/17):note:BugFix date.js
note:NAS6LIB_2_3_0(2026/08/19):note:supports ES modules.
note:NAS6LIB_2_3_1(2026/09/14):note:add BigIntCalculator.js BigFloatCalculator.js
licence:GPL-3.0

Clone this wiki locally