0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第1章 導入──三角関数を“文化”として扱う理由

PLCで三角関数を使う場面は多いが、
その内部構造を理解する機会は意外と少ない。
本稿では、三角関数を「計算」ではなく
「構造」として扱う視点を提示する。

なんちゃってシリーズが大切にしてきたのは、
最小の構造で最大の意味を取り出すこと。
三角関数もまた、その思想に自然に属する。

第2章 ざっぱな構造──三角関数の全体像を一枚で掴む

三角関数は sin・cos・tan の三つに見えるが、
構造としては sin ひとつで十分である。
cos はシフト(+90°)、tan は割り算で導ける。

さらに、角度は象限ごとに整理でき、
0〜π/2 の範囲に折り返すことで
計算量を最小化できる。
本稿では、この“縮約”を中心に据える。

第3章 詳細な構造──DEGで整え、RADで波を描く

本稿の三角関数は、外界(DEG)と内界(RAD)を分けて扱う。
角度の整理は DEG のまま行い、波を描く計算だけを RAD で行う。

入力される θ_deg は 0〜360° の範囲にあるものとし、
まず象限を判定して折り返し角 α_deg(0〜90°)を作る。
この段階ではまだ π を使わない。誤差を入れないためである。

sin の本体となる計算は、α_deg を
α_rad = α_deg × (π / 180)
として弧度法に変換した後に行う。

こうして、角度の構造は DEG で整え、
波の計算は RAD で行うという二層構造が成立する。

第4章 実装前の思想──本体を最小化する設計哲学

本稿では、三角関数の“本体”を sin_base(α) のみとする。
0〜π/2 の範囲だけを扱い、
他のすべては構造から導く。

分岐を減らし、計算を減らし、
構造を最大限に活かす。
これはなんちゃってシリーズが
一貫して大切にしてきた設計思想である。

第5章 なんちゃって三角関数 ── πの文化圏に属するもの

三角関数は角度の計算ではない。
その本体は、円周を π で割りつけたときに現れる
“弧度法”という文化圏にある。

角度は入口にすぎず、波の言語としての三角関数は
πを母体とする世界で初めて意味を持つ。
だから、なんちゃって三角関数を作るとき、
私たちは自然と“なんちゃってπ”へ帰っていく。

πを近似し、円周を近似し、その上で波を描く。
そこに生まれる誤差は欠陥ではなく、この文化圏の風味である。

たとえば sin(π/2) は本来 1 になるが、
なんちゃってπを使えば π/2 もまた近似値となり、
sin(π/2) は 1 にならない。
その揺らぎこそが、このシリーズの遊び心である。

本章では、三角関数を“計算”ではなく“文化”として扱う。
πを母体とし、弧度法の上に波を描く。
その小さな癖やズレを、なんちゃってという名の自由として受け入れる。
 
■ sin の本体は、弧度法の上で展開される

弧度法の世界では、sin は 0 まわりで展開できる。
これは マクローリン展開 と呼ばれ、次のように表される。

$$
\sin x = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \cdots
$$

本稿では、このうち 最初の二つの項(3次・5次)だけ を用いた。
最小構造の近似式を採用する。

$$
\sin x \approx x - \frac{x^3}{6} + \frac{x^5}{120}
$$

これは sin の5次マクローリン多項式 であり、
波を描くための “なんちゃって三角関数” の本体となる。


■ コラム:アジアと弧度法──円を基準にする文化の源流

「アジアの技術文化は弧度法を自然に受け入れてきた」  
この言い方には、いくつかの歴史的背景がある。

 ● インド数学:三角関数は“弦の幾何”から始まった
インドの古典三角法(Jyā, Koṭi-jyā)は、
角度ではなく「円の弦の長さ」を基準に定義されていた。
つまり、角度を数えるよりも、
円弧と弦の関係を直接扱う文化が最初から存在した。

 ● 中国数学:円周率研究は“円の割り付け”の文化
劉徽や祖沖之の円周率研究は、
円を細かく分割し、弧を扱うことで精度を上げていく手法だった。
ここでも主役は「度数」ではなく、
円そのものをどう割るかという発想だった。

 ● ヨーロッパとの対比:度数法文化圏
一方、ヨーロッパはバビロニア由来の60進法を継承し、
航海・天文学の伝統の中で「360°」が強く根付いた。
つまり、角度を数える文化が主流だった。

~~~~~~~~~~~~~~~~~~~~~
これらを並べると、  
アジア圏では「角度よりも円弧を基準にする」  
いわば 弧度法的な感覚が自然に育っていたと言える。

本編で語った“πの文化圏”という言葉は、  
こうした歴史的背景の上に立っている。

第6章 象限フラグ A/B と境界点の扱い

象限判定は、角度 θ_deg を 1ワードのフラグ A/B に写像することで
分岐なしで処理できる。

A/B の割り当ては次のとおりとする。

第1象限:A=0, B=0(0°〜90°未満)
第2象限:A=1, B=0(90°〜180°未満)
第3象限:A=0, B=1(180°〜270°未満)
第4象限:A=1, B=1(270°〜360°未満)

境界点は次のように扱う。

0° → 第1象限(A=0, B=0)
90° → 第2象限(A=1, B=0)
180° → 第3象限(A=0, B=1)
270° → 第4象限(A=1, B=1)
360° → 第1象限(0°と同じ扱い)

この A/B を用いることで、折り返し角 α_deg は
分岐なしで次の式で求められる。

α_deg = | θ_deg − 180 ( A + B ) |

符号も A/B から決定できる。

sin符号 = +1(B=0), −1(B=1)

これにより、象限判定・折り返し角・符号処理を
すべて分岐なしで実装できる。

第7章 実装体系──なんちゃって三角関数のサブルーチン構造

本章では、第1〜6章で構築した思想・構造をもとに、
実際に PLC 上で動作する なんちゃって三角関数の実装体系 を示す。
本実装は、PLC編集画面のハードコピー(ラダー)をそのまま貼り付ける形式で提示する。

本章のサンプルコード一式(ZIP)は以下からダウンロードできます。
👉 [なんちゃって三角関数サンプルコード(ZIP)]
https://yenqoo.com/qiita/nancyaTriFN.zip


7.1 全体構成──三角関数のサブルーチン

本稿のなんちゃって三角関数は、
すべての演算をサブルーチン化し、
入力と出力はレジスタで受け渡す方式を採用する。
メイン処理の流れは次のとおり。

• 入力角度 θ_deg をレジスタにセット
• θ_deg をそのまま渡して Call SIN_ROUTINE
• θ_deg + 90° を渡して Call SIN_ROUTINE(→ cos)
• PLC純正の SIN/COS 命令も同時計算し、比較用に表示
• 入力刻みは0.1°(35°を入力するなら「350」と入力)

この構成により、
sin と cos を同じ本体で計算できる
という“なんちゃ三角”の思想がそのまま実装に落ちる。
00001.jpg


7.2 サブルーチンの内部構造

サブルーチンは、
以下の 7 段階で構成される。

① 360°未満への正規化
入力角度 θ_deg が 360°以上の場合、
360°未満に正規化する。
• 360°は 0° と同じ扱い
• MOD 演算で実装
00011.jpg
 
② A/B フラグの生成(象限判定)
入力角度 θ を 1ワード のフラグ A/B に写像する。
• A:折り返し方向 [DM14]
• B:符号(180°を跨いだか)[DM15]
00013.jpg
 
③ 折り返し角 の生成(分岐なし)
A/B を使って 0〜90° の折り返し角を作る。
00017.jpg
 
④ DEG → RAD(なんちゃって円周率+なんちゃって四捨五入)

本稿で使用する DEG→RAD 変換は、
第5章で述べた “なんちゃって円周率” と
“なんちゃって四捨五入(固定小数点)” を用いる。

• なんちゃって円周率 を使用(355/113 など)
• 小数5桁目で丸める(なんちゃって四捨五入 固定小数点)
• 浮動小数点に変換して近似計算へ渡す
00019.jpg
 
⑤ 近似計算(5次マクローリン)
$$
\sin x \approx x - \frac{x^3}{6} + \frac{x^5}{120}
$$
• 浮動小数点演算
• 小数5桁目で丸める
00022.jpg
 
⑥ 整数化と符号付与
• 最終値は整数化
• 符号は B から決定
• レジスタに結果を書き戻す(演算途中に自動で書かれる)
00026.jpg
 

7.3 cos の計算──sin に +90°して同じルーチンを呼ぶ

cos は別ルーチンを持たず、
θ_deg + 90° を入力して サブルーチン を呼ぶだけ。
00003.jpg

7.4 純正 sin/cos との比較

PLC標準の SIN/COS 命令を同時に実行し、
なんちゃ三角との誤差を比較できるようにする。
00004.jpg


付録:サンプルコード(再掲)

記事内で使用したサンプルコード一式(ZIP)は以下から取得できます。
👉 [なんちゃ三角関数サンプルコード(ZIP)]
https://yenqoo.com/qiita/nancyaTriFN.zip


技術者は破天荒であれ。

この記事が、必要な人へ。
困っている人に、届きますように。


作者
圓空(えんくう)
https://yenqoo.com/spices/
https://yenqoo.com/monologue/

キーエンスPLCを中心に、
“技術 × 美学 × 遊び心” をテーマにした技術文化を発信しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?