{"id":30814,"date":"2026-07-27T08:38:00","date_gmt":"2026-07-26T23:38:00","guid":{"rendered":"https:\/\/123210.net\/wordpress\/tatenaoshi\/?p=30814"},"modified":"2026-08-02T02:01:09","modified_gmt":"2026-08-01T17:01:09","slug":"%e5%86%8d%e5%b8%b0%e3%81%ae%e5%9f%ba%e7%a4%8e%ef%bc%9a%e5%85%ab%e5%85%83%e6%95%b0%e3%80%81%e4%ba%8c%e5%88%86%e6%9c%a8%e3%80%81cohl-furey-%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e7%b5%84%e3%81%bf02","status":"publish","type":"post","link":"https:\/\/123210.net\/wordpress\/tatenaoshi\/%e5%86%8d%e5%b8%b0%e3%81%ae%e5%9f%ba%e7%a4%8e%ef%bc%9a%e5%85%ab%e5%85%83%e6%95%b0%e3%80%81%e4%ba%8c%e5%88%86%e6%9c%a8%e3%80%81cohl-furey-%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e7%b5%84%e3%81%bf02\/","title":{"rendered":"\u518d\u5e30\u306e\u57fa\u790e\uff1a\u516b\u5143\u6570\u3001\u4e8c\u5206\u6728\u3001Cohl Furey \u306e\u30e2\u30c7\u30eb\u7d44\u307f\u8fbc\u307f\u3000\u5b9f\u884c\u7d50\u679c\u3068\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3000\uff06\u3000\u63cf\u753b\uff12"},"content":{"rendered":"<p>root-&gt;Generate(12);\u3068\u3057\u3066<br \/>\nmaxDepth\u309212\u306b\u3042\u3052\u3066\u5b9f\u884c\u3057\u3066\u307f\u307e\u3057\u305f<\/p>\n<hr \/>\n<p>\u5b9f\u884c\u7d50\u679c<\/p>\n<p><a href=\"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-content\/uploads\/sites\/3\/2026\/07\/\u5b9f\u884c\u72b6\u6cc110.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-30942\" src=\"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-content\/uploads\/sites\/3\/2026\/07\/\u5b9f\u884c\u72b6\u6cc110.jpg\" alt=\"\" width=\"1744\" height=\"1027\" srcset=\"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-content\/uploads\/sites\/3\/2026\/07\/\u5b9f\u884c\u72b6\u6cc110.jpg 1744w, https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-content\/uploads\/sites\/3\/2026\/07\/\u5b9f\u884c\u72b6\u6cc110-300x177.jpg 300w, https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-content\/uploads\/sites\/3\/2026\/07\/\u5b9f\u884c\u72b6\u6cc110-1024x603.jpg 1024w, https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-content\/uploads\/sites\/3\/2026\/07\/\u5b9f\u884c\u72b6\u6cc110-768x452.jpg 768w, https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-content\/uploads\/sites\/3\/2026\/07\/\u5b9f\u884c\u72b6\u6cc110-1536x905.jpg 1536w\" sizes=\"auto, (max-width: 1744px) 100vw, 1744px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>C++Builder2007\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/p>\n<p>\/\/*** Unit1.h ***<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#ifndef Unit1H<br \/>\n#define Unit1H<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n#include &lt;Classes.hpp&gt;<br \/>\n#include &lt;Controls.hpp&gt;<br \/>\n#include &lt;StdCtrls.hpp&gt;<br \/>\n#include &lt;Forms.hpp&gt;<br \/>\n#include &#8220;Chart.hpp&#8221;<br \/>\n#include &#8220;TeEngine.hpp&#8221;<br \/>\n#include &#8220;TeeProcs.hpp&#8221;<br \/>\n#include &lt;ExtCtrls.hpp&gt;<\/p>\n<p>#include &lt;Series.hpp&gt;<br \/>\n#include &lt;ComCtrls.hpp&gt; \/\/ \u2190 \u3053\u308c\u3092\u8ffd\u52a0\uff08\u6700\u91cd\u8981\uff09<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/ \u5c65\u6b74\u7528\u69cb\u9020\u4f53<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nstruct OctoState {<br \/>\nint step;<br \/>\nint depth;<br \/>\ndouble c[8];<br \/>\ndouble norm2;<br \/>\ndouble N;<br \/>\nint lastDeriv;<br \/>\n};<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/ \u516b\u5143\u6570<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nstruct Octonion {<br \/>\ndouble e[8];<\/p>\n<p>Octonion(double a0=0.0, double a1=0.0, double a2=0.0, double a3=0.0,<br \/>\ndouble a4=0.0, double a5=0.0, double a6=0.0, double a7=0.0);<\/p>\n<p>Octonion operator+(const Octonion&amp; o) const;<br \/>\nOctonion operator-(const Octonion&amp; o) const; \/\/ \u6e1b\u7b97<br \/>\nOctonion operator-() const; \/\/ \u5358\u9805\u30de\u30a4\u30ca\u30b9\uff08\u5ff5\u306e\u305f\u3081\uff09<br \/>\nOctonion operator*(const Octonion&amp; o) const; \/\/ \u2190 \u5909\u66f4\uff1a\u5b8c\u5168\u4e57\u7b97<br \/>\nOctonion operator*(double scalar) const; \/\/ \u30b9\u30ab\u30e9\u30fc\u4e57\u7b97\u306f\u6b8b\u3059<br \/>\ndouble Norm() const;<\/p>\n<p>Octonion Conjugate() const; \/\/ \u6a19\u6e96\u7684\u306a\u5171\u5f79<br \/>\nOctonion PhaseConjugate() const; \/\/ \u4f4d\u76f8\u5171\u5f79\u7528\uff08\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u62e1\u5f35\u53ef\u80fd\uff09<br \/>\nOctonion ApplyDerivation(const Octonion&amp; a, const Octonion&amp; b) const; \/\/ D_a,b (this)<br \/>\n};<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/ \u518d\u5e30\u516b\u5143\u6570<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nclass RecursiveOcto {<br \/>\npublic:<br \/>\nint depth;<br \/>\nOctonion value;<br \/>\nRecursiveOcto* child; \/\/ \u901a\u5e38\u306e\u5b50<br \/>\nRecursiveOcto* childConj; \/\/ \u5171\u5f79\u306e\u5b50\uff08\u8ffd\u52a0\uff09<br \/>\nOctonion interference; \/\/ \u5e72\u6e09\u7d50\u679c\u3092\u4fdd\u6301\u3059\u308b\u30e1\u30f3\u30d0\u30fc\u3092\u8ffd\u52a0<\/p>\n<p>\/\/ \u2605 \u8ffd\u52a0<br \/>\ndouble N; \/\/ \u6570\u6f14\u7b97\u5b50\uff08\u52b1\u8d77\u5ea6\uff09<br \/>\ndouble Q; \/\/ \u96fb\u8377\u7684\u306a\u91cf = N \/ 3<\/p>\n<p>RecursiveOcto(int d, Octonion init);<br \/>\n~RecursiveOcto();<br \/>\nvoid Generate(int maxDepth);<br \/>\nvoid Dump(TMemo* memo);<\/p>\n<p>void ComputeNumberOperator(); \/\/ \u2605 \u8ffd\u52a0<\/p>\n<p>\/\/ \u89b3\u5bdf\uff08Observe\uff09\u6a5f\u80fd\u3068\u306e\u9023\u643a<br \/>\nint preferredDir; \/\/ \u89b3\u5bdf\u3067\u56fa\u5b9a\u3055\u308c\u305f\u65b9\u5411\uff08-1 = \u672a\u89b3\u5bdf\uff09<br \/>\nvoid Observe(int dir); \/\/ dir = 0?6\uff08e1?e7\uff09<br \/>\n};<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/ \u30d5\u30a9\u30fc\u30e0<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nclass TForm1 : public TForm<br \/>\n{<br \/>\n__published: \/\/ IDE-managed Components<br \/>\nTButton *ButtonExit;<br \/>\nTMemo *Memo1;<br \/>\nTButton *Button2;<br \/>\nTChart *ChartTime;<br \/>\nTChart *ChartNorm;<br \/>\nTChart *Chart3D;<br \/>\nTPaintBox *PaintBox3D;<br \/>\nTTrackBar *TrackBarZoom;<br \/>\nTRadioGroup *RadioGroup1;<br \/>\nTEdit *Edit1;<br \/>\nTUpDown *UpDown1;<br \/>\nvoid __fastcall ButtonExitClick(TObject *Sender);<br \/>\nvoid __fastcall Button2Click(TObject *Sender);<br \/>\nvoid __fastcall FormCreate(TObject *Sender);<br \/>\nvoid __fastcall PaintBox3DPaint(TObject *Sender);<br \/>\nvoid __fastcall PaintBox3DMouseDown(TObject *Sender, TMouseButton Button,<br \/>\nTShiftState Shift, int X, int Y);<br \/>\nvoid __fastcall PaintBox3DMouseMove(TObject *Sender, TShiftState Shift, int X,<br \/>\nint Y);<br \/>\nvoid __fastcall PaintBox3DMouseUp(TObject *Sender, TMouseButton Button,<br \/>\nTShiftState Shift, int X, int Y);<br \/>\nvoid __fastcall TrackBarZoomChange(TObject *Sender);<br \/>\nvoid __fastcall RadioGroup1Click(TObject *Sender);<br \/>\nprivate: \/\/ User declarations<br \/>\nTList* History;<\/p>\n<p>void ClearHistory();<br \/>\nvoid CollectHistory(RecursiveOcto* node, int&amp; counter);<br \/>\nvoid __fastcall InitTimeCharts();<br \/>\nvoid Init3DChart();<br \/>\nvoid __fastcall UpdateTimeCharts();<br \/>\nvoid __fastcall Update3DChart();<\/p>\n<p>\/\/OpenGL\u98a8<br \/>\ndouble rotX, rotY; \/\/ \u56de\u8ee2\u89d2\u5ea6\uff08\u30e9\u30b8\u30a2\u30f3\uff09<br \/>\ndouble zoom; \/\/ \u30ba\u30fc\u30e0\uff081.0\u304c\u57fa\u6e96\uff09<br \/>\ndouble panX, panY; \/\/ \u753b\u9762\u79fb\u52d5 int oldX, oldY; \/\/ \u30de\u30a6\u30b9\u524d\u56de\u4f4d\u7f6e<br \/>\nint oldX, oldY;<br \/>\nbool dragging;<br \/>\nbool panning; \/\/ \u30d1\u30f3\u4e2d\u304b\u3069\u3046\u304b<br \/>\nint projMode; \/\/ 0\uff5e4 \u306a\u3069\u306e\u5c04\u5f71\u756a\u53f7<\/p>\n<p>void Project3D(double x, double y, double z, int&amp; sx, int&amp; sy);<br \/>\nvoid DrawPointCloud();<\/p>\n<p>public: \/\/ User declarations<br \/>\n__fastcall TForm1(TComponent* Owner);<br \/>\n};<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nextern PACKAGE TForm1 *Form1;<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n#endif<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p>\/\/*** Unit1.cpp ***<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>#include &lt;vcl.h&gt;<br \/>\n#pragma hdrstop<\/p>\n<p>#include &lt;math.h&gt;<br \/>\n#include &#8220;Unit1.h&#8221;<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n#pragma package(smart_init)<br \/>\n#pragma link &#8220;Chart&#8221;<br \/>\n#pragma link &#8220;TeEngine&#8221;<br \/>\n#pragma link &#8220;TeeProcs&#8221;<br \/>\n#pragma resource &#8220;*.dfm&#8221;<br \/>\nTForm1 *Form1;<\/p>\n<p>\/\/\u30ea\u30f3\u30ab\uff5c\u51fa\u529b\u30aa\u30d7\u30b7\u30e7\u30f3\uff5c\u6700\u5927\u30b9\u30bf\u30c3\u30af\u30b5\u30a4\u30ba\u30000x64000000\uff08\u7d041.56GB\uff09\u5927\u304d\u3059\u304e\u3067\u3042\u3063\u305f\u306e\u3067\u30010x10000000\u306b\u8a2d\u5b9a<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n__fastcall TForm1::TForm1(TComponent* Owner)<br \/>\n: TForm(Owner)<br \/>\n{<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nvoid __fastcall TForm1::ButtonExitClick(TObject *Sender)<br \/>\n{<br \/>\nClose();<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>Octonion::Octonion(double a0, double a1, double a2, double a3,<br \/>\ndouble a4, double a5, double a6, double a7) {<br \/>\ne[0]=a0; e[1]=a1; e[2]=a2; e[3]=a3;<br \/>\ne[4]=a4; e[5]=a5; e[6]=a6; e[7]=a7;<br \/>\n}<\/p>\n<p>Octonion Octonion::Conjugate() const {<br \/>\nreturn Octonion(<br \/>\ne[0],<br \/>\n-e[1], -e[2], -e[3], -e[4], -e[5], -e[6], -e[7]<br \/>\n);<br \/>\n}<\/p>\n<p>Octonion Octonion::PhaseConjugate() const {<br \/>\nreturn Conjugate();<br \/>\n}<\/p>\n<p>Octonion Octonion::operator+(const Octonion&amp; o) const {<br \/>\nOctonion res;<br \/>\nfor(int i=0; i&lt;8; i++) res.e[i] = e[i] + o.e[i];<br \/>\nreturn res;<br \/>\n}<\/p>\n<p>\/\/ \u4e8c\u9805\u6e1b\u7b97<br \/>\nOctonion Octonion::operator-(const Octonion&amp; o) const {<br \/>\nOctonion res;<br \/>\nfor(int i = 0; i &lt; 8; i++) {<br \/>\nres.e[i] = e[i] &#8211; o.e[i];<br \/>\n}<br \/>\nreturn res;<br \/>\n}<\/p>\n<p>\/\/ \u5358\u9805\u30de\u30a4\u30ca\u30b9<br \/>\nOctonion Octonion::operator-() const {<br \/>\nOctonion res;<br \/>\nfor(int i = 0; i &lt; 8; i++) {<br \/>\nres.e[i] = -e[i];<br \/>\n}<br \/>\nreturn res;<br \/>\n}<\/p>\n<p>\/\/ \u30b9\u30ab\u30e9\u30fc\u4e57\u7b97\u306f\u6b8b\u3059<br \/>\nOctonion Octonion::operator*(double scalar) const {<br \/>\nOctonion res;<br \/>\nfor(int i=0; i&lt;8; i++) res.e[i] = e[i] * scalar;<br \/>\nreturn res;<br \/>\n}<\/p>\n<p>\/\/ \u5b8c\u5168\u306a\u516b\u5143\u6570\u4e57\u7b97<br \/>\nOctonion Octonion::operator*(const Octonion&amp; o) const {<br \/>\nOctonion res;<\/p>\n<p>\/\/ e0\uff08\u5b9f\u90e8\uff09<br \/>\nres.e[0] = e[0]*o.e[0] &#8211; e[1]*o.e[1] &#8211; e[2]*o.e[2] &#8211; e[3]*o.e[3]<br \/>\n&#8211; e[4]*o.e[4] &#8211; e[5]*o.e[5] &#8211; e[6]*o.e[6] &#8211; e[7]*o.e[7];<\/p>\n<p>\/\/ e1<br \/>\nres.e[1] = e[0]*o.e[1] + e[1]*o.e[0] + e[2]*o.e[3] &#8211; e[3]*o.e[2]<br \/>\n+ e[4]*o.e[5] &#8211; e[5]*o.e[4] &#8211; e[6]*o.e[7] + e[7]*o.e[6];<\/p>\n<p>\/\/ e2<br \/>\nres.e[2] = e[0]*o.e[2] &#8211; e[1]*o.e[3] + e[2]*o.e[0] + e[3]*o.e[1]<br \/>\n+ e[4]*o.e[6] + e[5]*o.e[7] &#8211; e[6]*o.e[4] &#8211; e[7]*o.e[5];<\/p>\n<p>\/\/ e3<br \/>\nres.e[3] = e[0]*o.e[3] + e[1]*o.e[2] &#8211; e[2]*o.e[1] + e[3]*o.e[0]<br \/>\n+ e[4]*o.e[7] &#8211; e[5]*o.e[6] + e[6]*o.e[5] &#8211; e[7]*o.e[4];<\/p>\n<p>\/\/ e4<br \/>\nres.e[4] = e[0]*o.e[4] &#8211; e[1]*o.e[5] &#8211; e[2]*o.e[6] &#8211; e[3]*o.e[7]<br \/>\n+ e[4]*o.e[0] + e[5]*o.e[1] + e[6]*o.e[2] + e[7]*o.e[3];<\/p>\n<p>\/\/ e5<br \/>\nres.e[5] = e[0]*o.e[5] + e[1]*o.e[4] &#8211; e[2]*o.e[7] + e[3]*o.e[6]<br \/>\n&#8211; e[4]*o.e[1] + e[5]*o.e[0] &#8211; e[6]*o.e[3] + e[7]*o.e[2];<\/p>\n<p>\/\/ e6<br \/>\nres.e[6] = e[0]*o.e[6] + e[1]*o.e[7] + e[2]*o.e[4] &#8211; e[3]*o.e[5]<br \/>\n&#8211; e[4]*o.e[2] + e[5]*o.e[3] + e[6]*o.e[0] &#8211; e[7]*o.e[1];<\/p>\n<p>\/\/ e7<br \/>\nres.e[7] = e[0]*o.e[7] &#8211; e[1]*o.e[6] + e[2]*o.e[5] + e[3]*o.e[4]<br \/>\n&#8211; e[4]*o.e[3] &#8211; e[5]*o.e[2] + e[6]*o.e[1] + e[7]*o.e[0];<\/p>\n<p>return res;<br \/>\n}<\/p>\n<p>double Octonion::Norm() const {<br \/>\ndouble sum = 0.0;<br \/>\nfor(int i=0; i&lt;8; i++) sum += e[i]*e[i];<br \/>\nreturn sqrt(sum);<br \/>\n}<\/p>\n<p>Octonion Octonion::ApplyDerivation(const Octonion&amp; a, const Octonion&amp; b) const<br \/>\n{<br \/>\n\/\/ 1. \u4ea4\u63db\u5b50 [a,b]<br \/>\nOctonion ab = a * b &#8211; b * a; \/\/ [a,b]<\/p>\n<p>\/\/ 2. \u4ea4\u63db\u5b50\u306e\u4f5c\u7528 [[a,b], this]<br \/>\nOctonion commutator_term = ab * (*this) &#8211; (*this) * ab;<\/p>\n<p>\/\/ 3. \u7d50\u5408\u5b50 [a,b,this] = (a*b)*this &#8211; a*(b*this)<br \/>\nOctonion assoc = (a * b) * (*this) &#8211; a * (b * (*this));<\/p>\n<p>\/\/ 4. \u6a19\u6e96\u7684\u306a\u5c0e\u5206\u516c\u5f0f\uff08\u4fc2\u6570\u306f\u8abf\u6574\u53ef\u80fd\uff09<br \/>\n\/\/ D = [[a,b],x] &#8211; 3[a,b,x]<br \/>\nOctonion result = commutator_term &#8211; assoc * 3.0;<\/p>\n<p>\/\/ \u30b9\u30b1\u30fc\u30eb\u8abf\u6574\uff08\u6442\u52d5\u304c\u5927\u304d\u3059\u304e\u306a\u3044\u3088\u3046\u306b\uff09<br \/>\n\/\/return result * 0.5;<br \/>\n\/\/return result * 0.20; \/\/ \u6442\u52d5\u304c\u5c11\u3057\u5f37\u3081\u306b\u51fa\u3066\u3044\u308b\u3088\u3046\u306a\u306e\u3067\u3001\u30b9\u30b1\u30fc\u30eb\u3092\u5c11\u3057\u5f31\u3081\u30660.5\u21920.20\uff0860%\u6e1b\uff09\u5b89\u5b9a\u6027\u3092\u78ba\u8a8d\u3059\u308b<br \/>\n\/\/return result * 0.25; \/\/ \u6442\u52d5\u304c\u5c11\u3057\u5f37\u3081\u306b\u51fa\u3066\u3044\u308b\u3088\u3046\u306a\u306e\u3067\u3001\u30b9\u30b1\u30fc\u30eb\u3092\u5c11\u3057\u5f31\u3081\u30660.5\u21920.25\uff0850%\u6e1b\uff09\u5b89\u5b9a\u6027\u3092\u78ba\u8a8d\u3059\u308b<br \/>\n\/\/return result * 0.30; \/\/ \u6442\u52d5\u304c\u5c11\u3057\u5f37\u3081\u306b\u51fa\u3066\u3044\u308b\u3088\u3046\u306a\u306e\u3067\u3001\u30b9\u30b1\u30fc\u30eb\u3092\u5c11\u3057\u5f31\u3081\u30660.5\u21920.30\uff0840%\u6e1b\uff09\u5b89\u5b9a\u6027\u3092\u78ba\u8a8d\u3059\u308b<br \/>\nreturn result * 0.35; \/\/ \u6442\u52d5\u304c\u5c11\u3057\u5f37\u3081\u306b\u51fa\u3066\u3044\u308b\u3088\u3046\u306a\u306e\u3067\u3001\u30b9\u30b1\u30fc\u30eb\u3092\u5c11\u3057\u5f31\u3081\u30660.5\u21920.35\uff0830%\u6e1b\uff09\u5b89\u5b9a\u6027\u3092\u78ba\u8a8d\u3059\u308b<br \/>\n\/\/return result * 0.40; \/\/ \u6442\u52d5\u304c\u5c11\u3057\u5f37\u3081\u306b\u51fa\u3066\u3044\u308b\u3088\u3046\u306a\u306e\u3067\u3001\u30b9\u30b1\u30fc\u30eb\u3092\u5c11\u3057\u5f31\u3081\u30660.5\u21920.40\uff0820%\u6e1b\uff09\u5b89\u5b9a\u6027\u3092\u78ba\u8a8d\u3059\u308b<br \/>\n\/\/return result * 0.45; \/\/ \u6442\u52d5\u304c\u5c11\u3057\u5f37\u3081\u306b\u51fa\u3066\u3044\u308b\u3088\u3046\u306a\u306e\u3067\u3001\u30b9\u30b1\u30fc\u30eb\u3092\u5c11\u3057\u5f31\u3081\u30660.5\u21920.45\uff0810%\u6e1b\uff09\u5b89\u5b9a\u6027\u3092\u78ba\u8a8d\u3059\u308b<br \/>\n\/\/*** \u8a55\u4fa1\u7d50\u679c\uff1a0.30\uff1a\u63a7\u3048\u3081\u3060\u304c\u52b9\u679c\u306f\u5341\u5206\u51fa\u308b ***<br \/>\n\/\/*** \u8a55\u4fa1\u7d50\u679c\uff1a0.35\uff1a\u5c0e\u5206\u306e\u5f71\u97ff\u304c\u3088\u308a\u660e\u78ba\u306b\u73fe\u308c\u3064\u3064\u3001\u5b89\u5b9a\u6027\u3082\u9ad8\u3044 ***<\/p>\n<p>}<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nRecursiveOcto::RecursiveOcto(int d, Octonion v)<br \/>\n: depth(d), value(v), child(NULL), childConj(NULL),<br \/>\nN(0.0), Q(0.0), preferredDir(-1)<br \/>\n{<br \/>\n}<\/p>\n<p>RecursiveOcto::~RecursiveOcto() {<br \/>\ndelete child;<br \/>\ndelete childConj;<br \/>\n}<\/p>\n<p>void RecursiveOcto::Generate(int maxDepth) {<br \/>\nif (depth &gt;= maxDepth) return;<br \/>\n\/\/if (depth &gt;= maxDepth || depth &gt; 20) return; \/\/ \u5b89\u5168\u4e0a\u9650\u3092\u8ffd\u52a0<\/p>\n<p>\/\/ === \u65e2\u5b58\u306e\u56de\u8ee2\u5b50 ===<br \/>\nOctonion rotator(cos(depth*0.15), sin(depth*0.15), 0.05, 0,0,0,0,0);<\/p>\n<p>\/\/ === Fano\u5e73\u9762\u306e\u65b9\u5411\u5b9a\u7fa9 ===<br \/>\nOctonion dirs[7][2] = {<br \/>\n{ Octonion(0,1,0,0,0,0,0,0), Octonion(0,0,1,0,0,0,0,0) }, \/\/ 0<br \/>\n{ Octonion(0,1,0,0,0,0,0,0), Octonion(0,0,0,0,1,0,0,0) }, \/\/ 1<br \/>\n{ Octonion(0,1,0,0,0,0,0,0), Octonion(0,0,0,0,0,0,1,0) }, \/\/ 2<br \/>\n{ Octonion(0,0,1,0,0,0,0,0), Octonion(0,0,0,0,1,0,0,0) }, \/\/ 3<br \/>\n{ Octonion(0,0,1,0,0,0,0,0), Octonion(0,0,0,0,0,1,0,0) }, \/\/ 4<br \/>\n{ Octonion(0,0,0,1,0,0,0,0), Octonion(0,0,0,0,1,0,0,0) }, \/\/ 5<br \/>\n{ Octonion(0,0,0,1,0,0,0,0), Octonion(0,0,0,0,0,1,0,0) } \/\/ 6<br \/>\n};<\/p>\n<p>int dir = depth % 7;<\/p>\n<p>\/\/ === \u7c21\u6613\u7684\u306a\u5c40\u6240N\u63a8\u5b9a\uff08Generate\u6642\u70b9\u3067\u4f7f\u3048\u308b\u3088\u3046\u306b\uff09 ===<br \/>\ndouble imagStrength = 0.0;<br \/>\nfor(int i=1; i&lt;=7; i++) imagStrength += fabs(value.e[i]);<\/p>\n<p>\/\/ \u7c21\u6613N\uff08\u91cf\u5b50\u5316\u524d\uff09<br \/>\ndouble localN = 1.0 + imagStrength * 0.8; \/\/ \u30d9\u30fc\u30b9 + \u865a\u90e8\u306e\u5f37\u3055<br \/>\nif (localN &gt; 3.0) localN = 3.0;<\/p>\n<p>\/\/ N\u306b\u5fdc\u3058\u305f\u30b9\u30b1\u30fc\u30eb\u4fc2\u6570\uff08N\u304c\u5927\u304d\u3044\u307b\u3069\u5f37\u304f\u3059\u308b\uff09<br \/>\n\/\/ N=0 \u2192 \u5f31\u3044, N=3 \u2192 \u5f37\u3044<br \/>\ndouble nFactor = 0.4 + (localN \/ 3.0) * 0.9; \/\/ 0.4 ? 1.3 \u7a0b\u5ea6\u306e\u7bc4\u56f2<\/p>\n<p>\/\/*******************************************************************<br \/>\n\/\/ Generate \u5185\u306e\u5c0e\u5206\u90e8\u5206\u3067\u3001\u89b3\u5bdf\u6e08\u307f\u306e\u5834\u5408\u306f\u56fa\u5b9a\u65b9\u5411\u3092\u907f\u3051\u308b\uff0f\u5f31\u3081\u308b<br \/>\nif (preferredDir &gt;= 0) {<br \/>\n\/\/ \u89b3\u5bdf\u6e08\u307f\u306a\u3089\u3001\u56fa\u5b9a\u65b9\u5411\u306b\u95a2\u4fc2\u3059\u308b\u5c0e\u5206\u3092\u5f31\u3081\u308b<br \/>\n\/\/ \uff08\u7c21\u6613\u7684\u306b nFactor \u3092\u3055\u3089\u306b\u4e0b\u3052\u308b\uff09<br \/>\nnFactor *= 0.5;<br \/>\n}<br \/>\n\/\/*******************************************************************<\/p>\n<p>\/\/ === \u8907\u6570\u5c0e\u5206\uff08N\u4f9d\u5b58\u30b9\u30b1\u30fc\u30eb\u3092\u639b\u3051\u308b\uff09 ===<br \/>\nOctonion g2_perturb = value.ApplyDerivation(dirs[dir][0], dirs[dir][1]) * (0.07 * nFactor);<\/p>\n<p>int dir2 = (dir + 1) % 7;<br \/>\ng2_perturb = g2_perturb + value.ApplyDerivation(dirs[dir2][0], dirs[dir2][1]) * (0.03 * nFactor);<\/p>\n<p>int dir3 = (dir + 3) % 7;<br \/>\ng2_perturb = g2_perturb + value.ApplyDerivation(dirs[dir3][0], dirs[dir3][1]) * (0.015 * nFactor);<\/p>\n<p>\/\/ \u6b21\u306e\u72b6\u614b<br \/>\nOctonion next = (value + g2_perturb) * rotator;<br \/>\nnext = next + Octonion(0.03, 0,0,0,0,0,0,0);<\/p>\n<p>\/\/ \u5171\u5f79\u7248<br \/>\nOctonion nextConj = next.PhaseConjugate();<\/p>\n<p>\/\/ \u5b50\u751f\u6210 (\uff12\u500b\uff1a\u5171\u5f79\u5bfe\u3092\u751f\u6210)<br \/>\nchild = new RecursiveOcto(depth+1, next);<br \/>\nchild-&gt;Generate(maxDepth);<\/p>\n<p>childConj = new RecursiveOcto(depth+1, nextConj);<br \/>\nchildConj-&gt;Generate(maxDepth);<\/p>\n<p>\/\/ \u5e72\u6e09 + \u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af<br \/>\ninterference = (child-&gt;value + childConj-&gt;value) * 0.5;<br \/>\ndouble feedbackStrength = 0.3;<br \/>\nvalue = value * (1.0 &#8211; feedbackStrength) + interference * feedbackStrength;<br \/>\n}<\/p>\n<p>\/\/ \u6570\u6f14\u7b97\u5b50\u3092\u8a08\u7b97\u3059\u308b\u30e1\u30bd\u30c3\u30c9\uff08\u65b0\u898f\u8ffd\u52a0\uff09<br \/>\nvoid RecursiveOcto::ComputeNumberOperator()<br \/>\n{<br \/>\n\/\/if (depth &gt; 12) return; \/\/ \u8ffd\u52a0<\/p>\n<p>\/\/ \u57fa\u672c\u52b1\u8d77\uff1a\u81ea\u5206\u81ea\u8eab\u306e\u865a\u6570\u6210\u5206\u306e\u300c\u5f37\u3055\u300d<br \/>\n\/\/ \uff08e1?e7 \u306e\u7d76\u5bfe\u5024\u306e\u5408\u8a08\u3092\u9069\u5ea6\u306b\u30b9\u30b1\u30fc\u30eb\uff09<br \/>\ndouble imagStrength = 0.0;<\/p>\n<p>\/\/ \u2605 \u3053\u3053\u3092 e[1] \uff5e e[7] \u306b\u4fee\u6b63<br \/>\nimagStrength += fabs(value.e[1]);<br \/>\nimagStrength += fabs(value.e[2]);<br \/>\nimagStrength += fabs(value.e[3]);<br \/>\nimagStrength += fabs(value.e[4]);<br \/>\nimagStrength += fabs(value.e[5]);<br \/>\nimagStrength += fabs(value.e[6]);<br \/>\nimagStrength += fabs(value.e[7]);<\/p>\n<p>\/\/ \u5b50\u4f9b\u306e\u6709\u7121\u306b\u3088\u308b\u52b1\u8d77<br \/>\nint childCount = 0;<br \/>\nif (child) childCount++;<br \/>\nif (childConj) childCount++;<\/p>\n<p>\/\/ \u518d\u5e30\u7684\u306b\u5b50\u4f9b\u306e N \u3092\u52a0\u7b97\uff08\u968e\u5c64\u5168\u4f53\u306e\u52b1\u8d77\u3092\u84c4\u7a4d\uff09 \/\/ \u5b50\u4f9b\u306e N \u3092\u518d\u5e30\u7684\u306b\u96c6\u3081\u308b<br \/>\ndouble childrenN = 0.0;<br \/>\nif (child) {<br \/>\nchild-&gt;ComputeNumberOperator();<br \/>\nchildrenN += child-&gt;N;<br \/>\n}<br \/>\nif (childConj) {<br \/>\nchildConj-&gt;ComputeNumberOperator();<br \/>\nchildrenN += childConj-&gt;N;<br \/>\n}<\/p>\n<p>\/\/ \u6700\u7d42\u7684\u306a N \u306e\u5b9a\u7fa9\uff08\u8abf\u6574\u3057\u3084\u3059\u3044\u5f62\uff09<br \/>\n\/\/ \u5b50\u4f9b\u306e\u6570 \u00d7 1.0 + \u865a\u6570\u5f37\u5ea6 \u00d7 \u4fc2\u6570 + \u5b50\u4f9b\u305f\u3061\u306e N \u306e\u4e00\u90e8<br \/>\n\/\/N = childCount * 1.0 + imagStrength * 0.8 + childrenN * 0.3;<\/p>\n<p>\/\/ \u2605 \u4fc2\u6570\u3092\u8abf\u6574\u3057\u305f\u30d0\u30fc\u30b8\u30e7\u30f3<br \/>\n\/\/ \u5b50\u4f9b\u306e\u5bc4\u4e0e\u3092\u5f37\u3081\u3001\u865a\u6570\u5f37\u5ea6\u306e\u5f71\u97ff\u3092\u6291\u3048\u3081\u306b\u3059\u308b<br \/>\n\/*N = childCount * 1.5<br \/>\n+ imagStrength * 0.4<br \/>\n+ childrenN * 0.25;*\/<br \/>\n\/\/ \u2605 \u3053\u3053\u3092\u5927\u304d\u304f\u5909\u66f4<br \/>\nN = childCount * 1.0 \/\/ \u5b50\u4f9b\u306e\u6570\u306e\u5f71\u97ff\u3092\u5f31\u3081\u308b<br \/>\n+ imagStrength * 0.6<br \/>\n+ childrenN * 0.05; \/\/ \u5b50\u5b6b\u304b\u3089\u306e\u84c4\u7a4d\u3092\u304b\u306a\u308a\u5f31\u304f\u3059\u308b<\/p>\n<p>\/\/ \u3055\u3089\u306b\u3001\u3042\u308b\u7a0b\u5ea6\u6574\u6570\u306b\u8fd1\u3065\u3051\u308b\u305f\u3081\u306e\u4e38\u3081\uff08\u4efb\u610f\uff09<br \/>\n\/\/ N = floor(N + 0.5); \/\/ \u6574\u6570\u306b\u3057\u305f\u3044\u5834\u5408\u306f\u3053\u306e\u884c\u3092\u6709\u52b9\u306b\u3059\u308b<br \/>\n\/\/ \u2605 \u3053\u3053\u304b\u3089\u91cf\u5b50\u5316\uff08\u96e2\u6563\u5316\uff09<\/p>\n<p>\/\/ \u91cf\u5b50\u5316<br \/>\nif (N &lt; 0.7) N = 0.0;<br \/>\nelse if (N &lt; 1.5) N = 1.0;<br \/>\nelse if (N &lt; 2.3) N = 2.0;<br \/>\nelse N = 3.0;<\/p>\n<p>\/\/ \u96fb\u8377\u7684\u306a\u91cf<br \/>\nQ = N \/ 3.0;<br \/>\n}<\/p>\n<p>void RecursiveOcto::Observe(int dir)<br \/>\n{<br \/>\nif (depth &gt; 12) return; \/\/ \u8ffd\u52a0<\/p>\n<p>if (dir &lt; 0 || dir &gt; 6) return;<\/p>\n<p>preferredDir = dir;<\/p>\n<p>\/\/ \u6307\u5b9a\u3057\u305f\u865a\u5358\u4f4d\u306e\u6210\u5206\u3092\u5f37\u8abf\u3057\u3001\u4ed6\u3092\u76f8\u5bfe\u7684\u306b\u6291\u5236\u3059\u308b\u7c21\u6613\u6295\u5f71<br \/>\n\/\/ \uff08\u5b8c\u5168\u306a\u5c04\u5f71\u3067\u306f\u306a\u304f\u3001\u89b3\u5bdf\u306b\u3088\u308b\u300c\u56fa\u5b9a\u300d\u306e\u30a4\u30e1\u30fc\u30b8\uff09<br \/>\ndouble strength = value.e[dir + 1]; \/\/ e1?e7<\/p>\n<p>\/\/ \u6307\u5b9a\u65b9\u5411\u3092\u6b8b\u3057\u3064\u3064\u3001\u5168\u4f53\u3092\u5c11\u3057\u6b63\u898f\u5316<br \/>\nfor(int i = 1; i &lt;= 7; i++) {<br \/>\nif (i == dir + 1) {<br \/>\n\/\/ \u6307\u5b9a\u65b9\u5411\u306f\u305d\u306e\u307e\u307e\uff08\u307e\u305f\u306f\u5c11\u3057\u5f37\u8abf\uff09<br \/>\nvalue.e[i] = strength * 1.1;<br \/>\n} else {<br \/>\n\/\/ \u4ed6\u306e\u65b9\u5411\u3092\u5f31\u3081\u308b<br \/>\nvalue.e[i] *= 0.6;<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/ \u5b50\u306b\u3082\u540c\u3058\u89b3\u5bdf\u3092\u4f1d\u64ad\uff08\u518d\u5e30\uff09<br \/>\nif (child) child-&gt;Observe(dir);<br \/>\nif (childConj) childConj-&gt;Observe(dir);<br \/>\n}<\/p>\n<p>void RecursiveOcto::Dump(TMemo* memo)<br \/>\n{<\/p>\n<p>if (!memo) return;<br \/>\nAnsiString s;<br \/>\ns.sprintf(&#8220;Depth=%d Norm=%.4f e0=%.4f e1=%.4f N=%.1f Q=%.3f&#8221;,<br \/>\ndepth, value.Norm(), value.e[0], value.e[1], N, Q);<br \/>\nmemo-&gt;Lines-&gt;Add(s);<\/p>\n<p>\/\/ \u30aa\u30d7\u30b7\u30e7\u30f3\uff1a\u865a\u90e8\u306e\u5927\u304d\u3055\u3092\u5c11\u3057\u8a73\u3057\u304f<br \/>\ndouble imag = 0;<br \/>\nfor(int i=1;i&lt;8;i++) imag += fabs(value.e[i]);<br \/>\ns.sprintf(&#8221; imagStrength=%.4f&#8221;, imag);<br \/>\nmemo-&gt;Lines-&gt;Add(s);<\/p>\n<p>if (child) { memo-&gt;Lines-&gt;Add(&#8221; [\u901a\u5e38\u306e\u5b50]&#8221;); child-&gt;Dump(memo); }<br \/>\nif (childConj) { memo-&gt;Lines-&gt;Add(&#8221; [\u5171\u5f79\u306e\u5b50]&#8221;); childConj-&gt;Dump(memo); }<br \/>\n}<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>void __fastcall TForm1::UpdateTimeCharts()<br \/>\n{<\/p>\n<p>if (!ChartTime || !ChartNorm) return;<br \/>\nif (ChartTime-&gt;SeriesCount() &lt; 8) return;<br \/>\nif (ChartNorm-&gt;SeriesCount() &lt; 2) return;<\/p>\n<p>\/\/ \u30af\u30ea\u30a2<br \/>\nfor (int i = 0; i &lt; ChartTime-&gt;SeriesCount(); i++)<br \/>\nChartTime-&gt;Series[i]-&gt;Clear();<br \/>\nChartNorm-&gt;Series[0]-&gt;Clear();<br \/>\nChartNorm-&gt;Series[1]-&gt;Clear();<\/p>\n<p>for (int i = 0; i &lt; History-&gt;Count; i++) {<br \/>\nOctoState* s = (OctoState*)History-&gt;Items[i];<br \/>\nfor (int k = 0; k &lt; 8; k++)<br \/>\nChartTime-&gt;Series[k]-&gt;AddXY(s-&gt;step, s-&gt;c[k]);<br \/>\nChartNorm-&gt;Series[0]-&gt;AddXY(s-&gt;step, s-&gt;norm2);<br \/>\nChartNorm-&gt;Series[1]-&gt;AddXY(s-&gt;step, s-&gt;N);<br \/>\n}<\/p>\n<p>ChartTime-&gt;Refresh();<br \/>\nChartNorm-&gt;Refresh();<br \/>\n}<\/p>\n<p>void TForm1::ClearHistory()<br \/>\n{<br \/>\nfor (int i = 0; i &lt; History-&gt;Count; i++)<br \/>\ndelete (OctoState*)History-&gt;Items[i];<br \/>\nHistory-&gt;Clear();<br \/>\n}<\/p>\n<p>void __fastcall TForm1::Update3DChart()<br \/>\n{<\/p>\n<p>if (!Chart3D) return;<br \/>\nif (Chart3D-&gt;SeriesCount() == 0) return;<\/p>\n<p>TPointSeries* ser = dynamic_cast&lt;TPointSeries*&gt;(Chart3D-&gt;Series[0]);<br \/>\nif (!ser) return;<\/p>\n<p>ser-&gt;Clear();<\/p>\n<p>for (int i = 0; i &lt; History-&gt;Count; i++) {<br \/>\nOctoState* s = (OctoState*)History-&gt;Items[i];<br \/>\ndouble x = s-&gt;c[1];<br \/>\ndouble y = s-&gt;c[2];<\/p>\n<p>TColor col = clBlack;<br \/>\nif (s-&gt;N &gt;= 2.5) col = clRed;<br \/>\nelse if (s-&gt;N &gt;= 1.5) col = clLime;<br \/>\nelse if (s-&gt;N &gt;= 0.5) col = clBlue;<\/p>\n<p>ser-&gt;AddXY(x, y, &#8220;&#8221;, col);<br \/>\n}<\/p>\n<p>Chart3D-&gt;Axes-&gt;Bottom-&gt;Automatic = true;<br \/>\nChart3D-&gt;Axes-&gt;Left-&gt;Automatic = true;<br \/>\nChart3D-&gt;Refresh();<br \/>\n}<\/p>\n<p>void TForm1::CollectHistory(RecursiveOcto* node, int&amp; counter)<br \/>\n{<br \/>\nif (!node) return;<\/p>\n<p>OctoState* s = new OctoState;<br \/>\ns-&gt;step = counter++;<br \/>\ns-&gt;depth = node-&gt;depth;<br \/>\nfor (int i = 0; i &lt; 8; i++) s-&gt;c[i] = node-&gt;value.e[i];<br \/>\ns-&gt;norm2 = node-&gt;value.Norm() * node-&gt;value.Norm();<br \/>\ns-&gt;N = node-&gt;N;<br \/>\ns-&gt;lastDeriv = node-&gt;depth % 7;<\/p>\n<p>History-&gt;Add(s);<\/p>\n<p>CollectHistory(node-&gt;child, counter);<br \/>\nCollectHistory(node-&gt;childConj, counter);<br \/>\n}<\/p>\n<p>void __fastcall TForm1::Button2Click(TObject *Sender)<br \/>\n{<br \/>\nMemo1-&gt;Hide();<\/p>\n<p>Memo1-&gt;Clear();<br \/>\nClearHistory();<\/p>\n<p>Octonion rootVal(1.0, 0, 0, 0, 0, 0, 0, 0);<br \/>\nRecursiveOcto* root = new RecursiveOcto(0, rootVal);<br \/>\n\/\/root-&gt;Generate(5); \/\/ \u5f8c\u30677?8\u306b\u4e0a\u3052\u3066\u304f\u3060\u3055\u3044<br \/>\nroot-&gt;Generate(UpDown1-&gt;Position); \/\/ \u5f8c\u30677?8\u306b\u4e0a\u3052\u3066\u304f\u3060\u3055\u3044<br \/>\nroot-&gt;Observe(2);<br \/>\nroot-&gt;ComputeNumberOperator();<\/p>\n<p>int counter = 0;<br \/>\nCollectHistory(root, counter);<\/p>\n<p>root-&gt;Dump(Memo1);<\/p>\n<p>UpdateTimeCharts();<br \/>\nUpdate3DChart();<\/p>\n<p>Memo1-&gt;Show();<br \/>\ndelete root;<\/p>\n<p>\/\/ \u65e2\u5b58\u306e UpdateTimeCharts(); Update3DChart(); \u306e\u5f8c\u306b<br \/>\nPaintBox3D-&gt;Invalidate(); \/\/ \u65b0\u3057\u3044\u70b9\u7fa4\u3092\u63cf\u753b<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>void __fastcall TForm1::FormCreate(TObject *Sender)<br \/>\n{<br \/>\nHistory = new TList();<\/p>\n<p>\/\/ \u30c1\u30e3\u30fc\u30c8\u304c\u3061\u3083\u3093\u3068\u30d5\u30a9\u30fc\u30e0\u306b\u7d50\u3073\u3064\u3044\u3066\u3044\u308b\u304b\u78ba\u8a8d<br \/>\nif (!ChartTime || !ChartNorm || !Chart3D) {<br \/>\nShowMessage(&#8220;\u30c1\u30e3\u30fc\u30c8\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u30d5\u30a9\u30fc\u30e0\u306b\u6b63\u3057\u304f\u7d50\u3073\u3064\u3044\u3066\u3044\u307e\u305b\u3093\u3002\\n&#8221;<br \/>\n&#8220;IDE\u3067\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u540d\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002&#8221;);<br \/>\nreturn;<br \/>\n}<\/p>\n<p>InitTimeCharts();<br \/>\nInit3DChart();<\/p>\n<p>\/\/OpenGL\u98a8<br \/>\nrotX = 0.4; \/\/ \u521d\u671f\u306e\u50be\u304d<br \/>\nrotY = 0.6;<br \/>\nzoom = 1.0;<br \/>\npanX = 0.0;<br \/>\npanY = 0.0;<br \/>\ndragging = false;<br \/>\npanning = false;<\/p>\n<p>\/\/ PaintBox \u306e\u30a4\u30d9\u30f3\u30c8\u3092\u7d50\u3073\u3064\u3051\u308b\uff08IDE\u3067\u8a2d\u5b9a\u3057\u3066\u3082\u53ef\uff09<br \/>\nPaintBox3D-&gt;OnPaint = PaintBox3DPaint;<br \/>\nPaintBox3D-&gt;OnMouseDown = PaintBox3DMouseDown;<br \/>\nPaintBox3D-&gt;OnMouseMove = PaintBox3DMouseMove;<br \/>\nPaintBox3D-&gt;OnMouseUp = PaintBox3DMouseUp;<\/p>\n<p>\/\/ \u5c04\u5f71\u8ef8\u306e\u5207\u308a\u66ff\u3048\u7528\u30d1\u30e9\u30e1\u30fc\u30bf<br \/>\nprojMode = 0; \/\/ \u521d\u671f\u306f (e1, e2, e4)<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>void __fastcall TForm1::InitTimeCharts()<br \/>\n{<br \/>\nChartTime-&gt;View3D = false;<br \/>\nChartTime-&gt;Legend-&gt;Visible = true;<br \/>\nChartTime-&gt;Title-&gt;Text-&gt;Text = &#8220;Octonion Components&#8221;;<\/p>\n<p>\/\/ 8\u672c\u306e\u7dda\u30b7\u30ea\u30fc\u30ba\u3092\u4f5c\u6210<br \/>\nfor (int i = 0; i &lt; 8; i++) {<br \/>\nTLineSeries* ser = new TLineSeries(ChartTime);<br \/>\nChartTime-&gt;AddSeries(ser);<br \/>\n\/\/ser-&gt;Title = (i == 0) ? &#8220;Re&#8221; : &#8220;e&#8221; + IntToStr(i);<br \/>\nser-&gt;Title = (i == 0) ? AnsiString(&#8220;Re&#8221;) : AnsiString(&#8220;e&#8221;) + IntToStr(i);<br \/>\nser-&gt;LinePen-&gt;Width = 1;<br \/>\n\/\/ \u8272\u306f\u304a\u597d\u307f\u3067\uff08\u4f8b\uff09<br \/>\nstatic TColor cols[8] = {clBlack, clRed, clGreen, clBlue,<br \/>\nclFuchsia, clOlive, clNavy, clMaroon};<br \/>\nser-&gt;SeriesColor = cols[i];<br \/>\n}<\/p>\n<p>\/\/ \u30ce\u30eb\u30e0\u7528\u30c1\u30e3\u30fc\u30c8<br \/>\nChartNorm-&gt;View3D = false;<br \/>\nTLineSeries* sNorm = new TLineSeries(ChartNorm);<br \/>\nTLineSeries* sN = new TLineSeries(ChartNorm);<br \/>\nChartNorm-&gt;AddSeries(sNorm);<br \/>\nChartNorm-&gt;AddSeries(sN);<br \/>\nsNorm-&gt;Title = &#8220;|O|2&#8221;;<br \/>\nsN-&gt;Title = &#8220;N&#8221;;<br \/>\nsNorm-&gt;SeriesColor = clBlack;<br \/>\nsN-&gt;SeriesColor = clRed;<br \/>\n}<\/p>\n<p>void TForm1::Init3DChart()<br \/>\n{<\/p>\n<p>if (!Chart3D) return;<\/p>\n<p>\/\/ \u6700\u4f4e\u9650\u306e\u8a2d\u5b9a\u3060\u3051\u306b\u3059\u308b<br \/>\nChart3D-&gt;View3D = true;<br \/>\nChart3D-&gt;Legend-&gt;Visible = false;<\/p>\n<p>\/\/ View3DOptions \u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u4e00\u65e6\u524a\u9664\uff08\u3053\u308c\u304cAV\u306e\u539f\u56e0\uff09<br \/>\n\/\/ Chart3D-&gt;View3DOptions-&gt;Orthogonal = false;<br \/>\n\/\/ Chart3D-&gt;View3DOptions-&gt;Zoom = 90;<\/p>\n<p>\/\/ \u65e2\u5b58\u30b7\u30ea\u30fc\u30ba\u3092\u30af\u30ea\u30a2<br \/>\nwhile (Chart3D-&gt;SeriesCount() &gt; 0)<br \/>\nChart3D-&gt;Series[0]-&gt;Free();<\/p>\n<p>\/\/ \u30dd\u30a4\u30f3\u30c8\u30b7\u30ea\u30fc\u30ba\u3092\u8ffd\u52a0<br \/>\nTPointSeries* ser = new TPointSeries(Chart3D);<br \/>\nChart3D-&gt;AddSeries(ser);<br \/>\nser-&gt;Pointer-&gt;Style = psCircle;<br \/>\nser-&gt;Pointer-&gt;HorizSize = 3;<br \/>\nser-&gt;Pointer-&gt;VertSize = 3;<br \/>\nser-&gt;Pointer-&gt;Visible = true;<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nvoid TForm1::Project3D(double x, double y, double z, int&amp; sx, int&amp; sy)<br \/>\n{<\/p>\n<p>\/\/ \u56de\u8ee2<br \/>\ndouble cosy = cos(rotY), siny = sin(rotY);<br \/>\ndouble cosx = cos(rotX), sinx = sin(rotX);<\/p>\n<p>double x1 = x * cosy &#8211; z * siny;<br \/>\ndouble z1 = x * siny + z * cosy;<br \/>\ndouble y1 = y;<\/p>\n<p>double y2 = y1 * cosx &#8211; z1 * sinx;<br \/>\ndouble z2 = y1 * sinx + z1 * cosx;<br \/>\ndouble x2 = x1;<\/p>\n<p>\/\/ \u30ba\u30fc\u30e0\u4ed8\u304d\u900f\u8996\u6295\u5f71<br \/>\ndouble scale = (250.0 * zoom) \/ (4.0 + z2);<br \/>\nsx = (int)(PaintBox3D-&gt;Width \/ 2 + panX + x2 * scale);<br \/>\nsy = (int)(PaintBox3D-&gt;Height \/ 2 + panY &#8211; y2 * scale);<br \/>\n}<\/p>\n<p>void TForm1::DrawPointCloud()<br \/>\n{<br \/>\nTCanvas* c = PaintBox3D-&gt;Canvas;<\/p>\n<p>\/\/ \u80cc\u666f<br \/>\nc-&gt;Brush-&gt;Color = (TColor)0x1A1A2E;<br \/>\nc-&gt;FillRect(PaintBox3D-&gt;ClientRect);<\/p>\n<p>\/\/ ========== 3D\u30b0\u30ea\u30c3\u30c9\u30fb\u5ea7\u6a19\u8ef8\u3092\u63cf\u753b ==========<br \/>\nc-&gt;Pen-&gt;Width = 1;<\/p>\n<p>\/\/ \u8ef8\u306e\u9577\u3055\uff08\u30c7\u30fc\u30bf\u306b\u5408\u308f\u305b\u3066\u8abf\u6574\u3057\u3066\u304f\u3060\u3055\u3044\uff09<br \/>\ndouble axisLen = 0.8;<\/p>\n<p>\/\/ \u8272\u3092\u5909\u3048\u30663\u8ef8\u3092\u63cf\u304f<br \/>\n\/\/ X\u8ef8\uff08\u8d64\u3063\u307d\u3044\uff09<br \/>\nc-&gt;Pen-&gt;Color = (TColor)0x5555AA;<br \/>\nint x1, y1, x2, y2;<br \/>\nProject3D(-axisLen, 0, 0, x1, y1);<br \/>\nProject3D( axisLen, 0, 0, x2, y2);<br \/>\nc-&gt;MoveTo(x1, y1); c-&gt;LineTo(x2, y2);<\/p>\n<p>\/\/ Y\u8ef8\uff08\u7dd1\u3063\u307d\u3044\uff09<br \/>\nc-&gt;Pen-&gt;Color = (TColor)0x55AA55;<br \/>\nProject3D(0, -axisLen, 0, x1, y1);<br \/>\nProject3D(0, axisLen, 0, x2, y2);<br \/>\nc-&gt;MoveTo(x1, y1); c-&gt;LineTo(x2, y2);<\/p>\n<p>\/\/ Z\u8ef8\uff08\u9752\u3063\u307d\u3044\uff09<br \/>\nc-&gt;Pen-&gt;Color = (TColor)0xAA5555;<br \/>\nProject3D(0, 0, -axisLen, x1, y1);<br \/>\nProject3D(0, 0, axisLen, x2, y2);<br \/>\nc-&gt;MoveTo(x1, y1); c-&gt;LineTo(x2, y2);<\/p>\n<p>\/\/ \u7c21\u6613\u30b0\u30ea\u30c3\u30c9\uff08XY\u5e73\u9762\u30fbXZ\u5e73\u9762\u30fbYZ\u5e73\u9762\u306b\u6570\u672c\uff09<br \/>\nc-&gt;Pen-&gt;Color = (TColor)0x333355;<br \/>\ndouble g = 0.4; \/\/ \u30b0\u30ea\u30c3\u30c9\u9593\u9694<\/p>\n<p>\/\/ XY\u5e73\u9762\u306e\u30b0\u30ea\u30c3\u30c9<br \/>\nfor (double v = -axisLen; v &lt;= axisLen; v += g) {<br \/>\nProject3D(v, -axisLen, 0, x1, y1);<br \/>\nProject3D(v, axisLen, 0, x2, y2);<br \/>\nc-&gt;MoveTo(x1, y1); c-&gt;LineTo(x2, y2);<\/p>\n<p>Project3D(-axisLen, v, 0, x1, y1);<br \/>\nProject3D( axisLen, v, 0, x2, y2);<br \/>\nc-&gt;MoveTo(x1, y1); c-&gt;LineTo(x2, y2);<br \/>\n}<\/p>\n<p>\/\/ ========== \u3053\u3053\u304b\u3089\u70b9\u7fa4\u63cf\u753b\uff08\u65e2\u5b58\u306e\u307e\u307e\uff09 ==========<br \/>\nif (!History || History-&gt;Count == 0) return;<\/p>\n<p>for (int i = 0; i &lt; History-&gt;Count; i++) {<br \/>\nOctoState* s = (OctoState*)History-&gt;Items[i];<\/p>\n<p>\/\/double x = s-&gt;c[1];<br \/>\n\/\/double y = s-&gt;c[2];<br \/>\n\/\/double z = s-&gt;c[4];<\/p>\n<p>\/\/ ===== \u5c04\u5f71\u8ef8\u306e\u9078\u629e =====<br \/>\ndouble x, y, z;<\/p>\n<p>switch (projMode) {<br \/>\ncase 0: \/\/ \u57fa\u672c (e1, e2, e4)<br \/>\nx = s-&gt;c[1];<br \/>\ny = s-&gt;c[2];<br \/>\nz = s-&gt;c[4];<br \/>\nbreak;<\/p>\n<p>case 1: \/\/ Observe\u65b9\u5411\u3092\u542b\u3080 (e1, e3, e7)<br \/>\nx = s-&gt;c[1];<br \/>\ny = s-&gt;c[3]; \/\/ e3<br \/>\nz = s-&gt;c[7];<br \/>\nbreak;<\/p>\n<p>case 2: \/\/ \u5b9f\u90e8\u3068\u4e3b\u306a\u865a\u90e8 (Re, e1, e2)<br \/>\nx = s-&gt;c[0];<br \/>\ny = s-&gt;c[1];<br \/>\nz = s-&gt;c[2];<br \/>\nbreak;<\/p>\n<p>case 3: \/\/ Fano\u4e09\u89d2\u5f62\u98a8<br \/>\nx = s-&gt;c[1] + s-&gt;c[2] + s-&gt;c[4];<br \/>\ny = s-&gt;c[3] + s-&gt;c[5] + s-&gt;c[6];<br \/>\nz = s-&gt;c[7];<br \/>\nbreak;<\/p>\n<p>case 4: \/\/ \u52b1\u8d77\u5ea6\u3092Z\u8ef8\u306b (e1, e2, N)<br \/>\nx = s-&gt;c[1];<br \/>\ny = s-&gt;c[2];<br \/>\nz = s-&gt;N * 0.3; \/\/ \u30b9\u30b1\u30fc\u30eb\u8abf\u6574<br \/>\nbreak;<\/p>\n<p>default:<br \/>\nx = s-&gt;c[1];<br \/>\ny = s-&gt;c[2];<br \/>\nz = s-&gt;c[4];<br \/>\nbreak;<br \/>\n}<\/p>\n<p>int sx, sy;<br \/>\nProject3D(x, y, z, sx, sy);<\/p>\n<p>if (sx &lt; -20 || sx &gt; PaintBox3D-&gt;Width+20 ||<br \/>\nsy &lt; -20 || sy &gt; PaintBox3D-&gt;Height+20) continue;<\/p>\n<p>TColor col;<br \/>\nif (s-&gt;N &gt;= 2.5) col = clRed;<br \/>\nelse if (s-&gt;N &gt;= 1.5) col = clLime;<br \/>\nelse if (s-&gt;N &gt;= 0.5) col = clAqua;<br \/>\nelse col = clSilver;<\/p>\n<p>c-&gt;Brush-&gt;Color = col;<br \/>\nc-&gt;Pen-&gt;Color = col;<br \/>\nc-&gt;Ellipse(sx-1, sy-1, sx+2, sy+2);<br \/>\n}<br \/>\n}<\/p>\n<p>void __fastcall TForm1::PaintBox3DPaint(TObject *Sender)<br \/>\n{<br \/>\nDrawPointCloud();<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>void __fastcall TForm1::PaintBox3DMouseDown(TObject *Sender,<br \/>\nTMouseButton Button, TShiftState Shift, int X, int Y)<br \/>\n{<br \/>\noldX = X;<br \/>\noldY = Y;<\/p>\n<p>if (Button == mbLeft) {<br \/>\ndragging = true;<br \/>\npanning = false;<br \/>\n}<br \/>\nelse if (Button == mbRight) {<br \/>\npanning = true;<br \/>\ndragging = false;<br \/>\n}<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>void __fastcall TForm1::PaintBox3DMouseMove(TObject *Sender, TShiftState Shift,<br \/>\nint X, int Y)<br \/>\n{<br \/>\nif (dragging) {<br \/>\n\/\/ \u56de\u8ee2<br \/>\nrotY += (X &#8211; oldX) * 0.01;<br \/>\nrotX += (Y &#8211; oldY) * 0.01;<br \/>\noldX = X;<br \/>\noldY = Y;<br \/>\nPaintBox3D-&gt;Invalidate();<br \/>\n}<br \/>\nelse if (panning) {<br \/>\n\/\/ \u79fb\u52d5<br \/>\npanX += (X &#8211; oldX);<br \/>\npanY += (Y &#8211; oldY);<br \/>\noldX = X;<br \/>\noldY = Y;<br \/>\nPaintBox3D-&gt;Invalidate();<br \/>\n}<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>void __fastcall TForm1::PaintBox3DMouseUp(TObject *Sender, TMouseButton Button,<br \/>\nTShiftState Shift, int X, int Y)<br \/>\n{<br \/>\n\/\/ dragging = false;<\/p>\n<p>dragging = false;<br \/>\npanning = false;<\/p>\n<p>}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>void __fastcall TForm1::TrackBarZoomChange(TObject *Sender)<br \/>\n{<br \/>\nint WheelDelta = TrackBarZoom-&gt;Position;<\/p>\n<p>if (WheelDelta &gt; 0)<br \/>\nzoom *= 1.15; \/\/ \u62e1\u5927<br \/>\nelse<br \/>\nzoom \/= 1.15; \/\/ \u7e2e\u5c0f<\/p>\n<p>\/\/ \u7bc4\u56f2\u5236\u9650<br \/>\nif (zoom &lt; 0.1) zoom = 0.1;<br \/>\nif (zoom &gt; 30.0) zoom = 30.0;<\/p>\n<p>PaintBox3D-&gt;Invalidate();<br \/>\n\/\/Handled = true;<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>&nbsp;<\/p>\n<p>void __fastcall TForm1::RadioGroup1Click(TObject *Sender)<br \/>\n{<br \/>\nprojMode = RadioGroup1-&gt;ItemIndex;<br \/>\nPaintBox3D-&gt;Invalidate();<br \/>\n}<br \/>\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>root-&gt;Generate(12);\u3068\u3057\u3066 maxDepth\u309212\u306b\u3042\u3052 &hellip; <a href=\"https:\/\/123210.net\/wordpress\/tatenaoshi\/%e5%86%8d%e5%b8%b0%e3%81%ae%e5%9f%ba%e7%a4%8e%ef%bc%9a%e5%85%ab%e5%85%83%e6%95%b0%e3%80%81%e4%ba%8c%e5%88%86%e6%9c%a8%e3%80%81cohl-furey-%e3%81%ae%e3%83%a2%e3%83%87%e3%83%ab%e7%b5%84%e3%81%bf02\/\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-30814","post","type-post","status-publish","format-standard","hentry","category-1"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/posts\/30814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/comments?post=30814"}],"version-history":[{"count":5,"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/posts\/30814\/revisions"}],"predecessor-version":[{"id":30944,"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/posts\/30814\/revisions\/30944"}],"wp:attachment":[{"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/media?parent=30814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/categories?post=30814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/123210.net\/wordpress\/tatenaoshi\/wp-json\/wp\/v2\/tags?post=30814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}