0.5°スキャン×二分法で解いたチェーン角度の逆問題の試行錯誤

2026年2月22日

チェーン角度の逆問題で鉛筆が止まる瞬間

搬送機構の設計図を前に、鉛筆を持った指が止まる瞬間、沈黙が作業場に落ちる。紙の上で三角関数を並べ、アーク関数の符号を確認しているうちに、鉛筆の先が消しゴムに触れている。図面には「チェーン長 1,250 mm、ピン位置は回転角 θ で決まる」とだけ書かれている。

胸の奥で「この角度でピンが来るのか」を確かめたい気持ちが膨らむ一方、紙計算では符号の取り違えやアーク関数の分岐で誤った解を採用してしまう恐れがあった。手が震えて電卓のボタンを押す指が一拍止まる。設計の最終確認で「見落としが致命的になるかもしれない」という緊張が常に付きまとう。

この記事では、座標→角度という逆問題の非対称性、解析解が得られない場面での数値解法選定、そして0.5°スキャン+二分法という二段階戦略を採用した理由と実装の細部がわかる。

既存ツールの限界と欠点

アーク関数の分岐を扱えない

既存の電卓や簡易ツールは arctan 系の扱いが単純で、符号や象限を誤ると角度が180°ずれる。たとえばチェーン長が1,250 mm、回転中心からの初期距離が800 mmのケースで、手計算で arctan(y/x) を使うと象限判定を誤り、設計上は必要な角度が 30° のところ 210° を採用してしまう危険がある。角度の象限判定や atan2 の挙動についてはMDNの Math.atan2 の解説が参考になる。

複数解を見落とす

座標→角度の逆問題では、1回転あたり複数の交点が存在することがある。既存ツールは単一解しか返さないことが多く、たとえば回転軸からの距離とチェーン長の組合せで1回転内に2つの交点がある場合(チェーン長 1,000 mm、回転半径 600 mm、オフセット 200 mm)に片方の解だけを提示してしまう。

全域探索のコストと信頼性不足

既存の探索ツールは全域スキャンを粗く行うか、逆に細かくやって計算時間が膨らむ。符号変化を正しく検出するには角度分解能と符号判定の両立が必要で、ブラウザ上でのリアルタイム性を保つには工夫が必要だ。

試行錯誤:設計判断の裏側

ボツ案:解析式で一発解を出すアプローチ

最初に試したのは「解析式で一発解を出す」アプローチ。三角関数を代入して式変形を進め、閉形式で角度を求めようとしたが、回転順序(X/Y/Z軸周り)やオフセットの有無で式が高次になり、逆関数の選択が複雑化して解析解が存在しないか、存在しても実装が極めて脆弱になることが判明した。紙計算では見落としやすい符号の扱いがソフト上でもバグの温床になるため不採用とした。

ニュートン法を使って高速に収束させる案も検討したが、初期値依存性とヤコビ行列の計算コスト、そして複数解が存在する場合の収束先の不確実性が理由で不採用とした。

スキャン分解能 vs 計算時間

| 項目 | 粗スキャン(0.5°) | 細密探索(二分法) | |------|---------------------|---------------------| | 目的 | 全域で符号変化区間を検出 | 区間内で高精度に根を絞り込む | | 計算量 | 低め | 区間数に依存 | | 見落としリスク | 低め(0.5°で十分) | ほぼゼロ(0.01°精度) |

トレードオフの判断基準は「見落としリスクを最小化しつつ、ブラウザでの即時性を保つ」こと。0.5°ステップで全域をスキャンし、符号変化が見つかった区間だけ二分法で絞り込む方式が最も妥当と判断した。二分法は符号変化の存在さえ確認できれば必ず根に収束するため、頑健性を優先した選択だ。

設計思想:透明性と頑健性

最終的に採用した設計思想は「透明性と頑健性」。計算過程をユーザーに見せることで、どの区間で解が見つかったか、複数解がある場合にそれぞれの角度を列挙する。実装の流れとしては、回転はX/Y/Zの順序で行い3D座標変換行列を適用して点Bの位置を求め、チェーン長との差 f(θ) = |B(θ)-A| - L を評価して符号変化(正→負、負→正)を検出し、符号変化区間を見つけたら二分法で区間を0.01°精度まで絞り込む。

完成したチェーンチェッカーの使い方

この問題を解決するために作ったのがチェーンチェッカー。紙計算で見落としがちな符号の扱いと複数解の存在を、視覚的にかつ確実に検出できるツールだ。

  1. 回転中心 A と初期点 B の座標、チェーン長 L を入力する
  2. 回転軸(X/Y/Z)と回転順序を指定する(デフォルトは X→Y→Z)
  3. 「全域スキャン」を実行して符号変化区間を検出する(0.5°ステップ)
  4. 検出された区間を二分法で0.01°精度まで絞り込み、複数解を一覧表示する

紙計算で見落としがちな符号の扱いと複数解の存在を確実に検出できる方式が最も妥当だったため、この形に落ち着いた。

よくある質問(FAQ)

Q: スキャンの分解能は変更できる?

ケースに応じて変えるべきだ。チェーン長と回転半径の比が極端な場合、0.5°では符号変化が狭い区間に収まることがあるため、0.25°や0.1°に変更して再スキャンすることで見落としを防げる。

Q: なぜニュートン法ではなく二分法を採用した?

頑健性を優先したためだ。二分法は符号変化が確認できれば必ず収束する性質を持つ。ニュートン法は収束が速いが初期値依存性が強く、複数解がある場合に誤った根に収束するリスクがあるため採用しなかった。

Q: データはサーバーに送信される?

すべてブラウザ内で処理される。サーバーにデータは送信されないし、ブラウザを閉じれば入力内容は消える。

Q: 入力座標の測定誤差はどう考慮すればいい?

現場では「初期座標の測定誤差」を考慮することが重要だ。入力値に±1 mmの誤差があると角度が数度変わることがあるため、許容誤差を設計側で決め、必要ならばスキャン分解能を上げて複数解の安定性を確認してほしい。

まとめ

チェーン長と回転点の逆問題は、座標→角度の非対称性と複数解の存在が設計上の落とし穴になる。0.5°の全域スキャンで符号変化を確実に検出し、二分法で高精度に絞り込む二段階戦略により、見落としを防ぎつつブラウザ上での即時性を両立した。

角度の逆問題を扱いたいときはチェーンチェッカーを試してみて。構造系の計算が必要な場面では梁の安全審判員も便利。


不具合や要望があれば、お問い合わせページから気軽に教えてほしい。

M

Mahiro

Mahiro Appの開発者。チェーン長さの手計算に手間取った経験から、スプロケット間のチェーン設計を自動化するツールを開発した。

運営者情報を見る

© 2026 Mahiro App