オフレコ

 投稿者:SECOND  投稿日:2014年 9月17日(水)12時22分55秒
  過去の神業数学らしきものの見え隠れについて、妙な事を、考えてみた。

十進BASIC の諸兄なら、数理的因果律は、あたりまえのことで、
それに反する事は、無いと言い切って頂けるだろう。そうでないように見える時も、
仕掛けが隠れているだけだと。

ならば、現在は、過去から見る無限の果て。「起源」が有る?と、その因は?
「因果律に反する所」になるので・・無限列 のままの方が、無理でなくなる。
 無限列へ抵抗する頭と、その理由も探せない不可思議 もある・・
・・・
有史以前ず~っと、無限な数学が、既存?となってしまうが・・
それは何処に? 脳が? まさか?


こんなものを投稿する所ではないので、ボツにしていたプログラムを付録。

!--------------------------------------------------------------------------------------
!バウンド・ボール on complex( Ver 7.5.0以降で動作)
!
!動作範囲を、凸角の、内角を含む多角形まで、広げた。
!十進BASICは、複素数モードにて 2次元座標を、1つの変数で指定したり、移動する事が、
!描画においても、行なえるので、(ver.7.5.0以降) 動作空間を、複素数平面上へ移した。
!--------------------------------------------------------------------------------------

!ボールを、速くするには、Step⊿を大きく、周期.02 を小さく。
!  )
!LET m0=0.23                    !ボールの Step⊿・・大きすぎると、凸角反射失敗する
! (
!  )         ↓・・・設定周期.02秒 小さいほど、消費電力 大きくなる。
!LET t2=t2+(.02-MOD(t1-t0,86400))/20  !20ms-検出周期(t1-t0)=偏差 →t2(積分 Gain=1/20)
! (
!--------------------------------------------------------------------------------------

OPTION ARITHMETIC COMPLEX      !複素数平面
LET m_=15                      !最大角数
LET ma=14                      !開始角数
LET m0=0.23                    !ボールの Step⊿
LET r=0.7                      !ボールの半径
LET r0=5                       !計算上の多角形 頂点~中心点 (±1 変化の中央)
DIM p(m_+1), s(m_+1), rec(3 TO m_, m_)
SET WINDOW -7,7, -7,7
SET TEXT background "opaque"
RANDOMIZE 6                    !引数を消すと、起動ごとに、再現されない。

DEF apex_(i)=(r0+2*RND-1)*EXP(COMPLEX(0,a1+ag*(i+(RND-3.5)/3)))  !各頂点 p(i)

FUNCTION apex(i)
   IF mlb=1 OR rec(ma,i)=0 THEN LET rec(ma,i)=apex_(i)
   LET apex=rec(ma,i)
END FUNCTION

DO
   CLEAR
   SET DRAW MODE overwrite
   SET LINE COLOR "silver"
   LET ag=2*PI/ma              !標準の(頂点間の中心角) =外角(辺の延長と隣辺の角度)
   LET a1=1.5*PI-ag/2          !標準 p(1) の方向。(↓方向-頂点間の中心角/2)
   LET p(1)=apex(1)
   FOR i=1 TO ma
      IF i< ma THEN LET p(i+1)=apex(i+1) ELSE LET p(i+1)=p(1) !各頂点
      LET s(i)=p(i+1)-p(i)
      PLOT LINES: p(i); p(i+1)                    !計算用の壁。辺 s(i)
   NEXT i
   LET s(i)=s(1)
   !                      s3          s4 4 s3
   !       p3          4──3      5/  \3
   !   s3/  \s2    s4│    │s2   s5\    /s2   ・・・
   !   p1───p2      1──2        1─2
   !       s1             s1             s1
   !
   SET LINE width 5                               !ボール(半径r) の当る外壁
   SET LINE COLOR "black"                         !---------------------------------
   LET a=(PI-arg(s(1)/s(ma)))/2                   !p(1)内角の1/2
   LET d1=r/SIN(a)*EXP(COMPLEX(0,arg(s(ma))-a))   !計算用 多角形頂点 ~外壁 多角形頂点
   FOR i=1 TO ma
      LET a=(PI-arg(s(i+1)/s(i)))/2               !p(i+1)内角の1/2
      LET d2=r/SIN(a)*EXP(COMPLEX(0,arg(s(i))-a)) !計算用 多角形頂点 ~外壁 多角形頂点
      PLOT LINES: p(i)+d1; p(i+1)+d2
      LET d1=d2
   NEXT i
   SET LINE width 1
   !---
   PLOT TEXT,AT 5.8 , 6.26: "停止"
   PLOT TEXT,AT 5.62, 5.68: "ボタン"
   PLOT LINES: 5.5,5.5; 6.95,5.5; 6.95,6.95 ; 5.5,6.95 ; 5.5,5.5
   PLOT TEXT,AT -6.7,-6.9: "左(順送り)右(逆送り)クリック:角数の選択= "& STR$(ma)& "  長押し0.5秒で早送り"
   CALL play00
   LET bma=ma
   IF 0< mlb THEN LET ma=MOD(ma-2,m_-2)+3 ELSE LET ma=MOD(ma-4,m_-2)+3 !角数 Loop 3,4,5,6,,m_,3,4,,
LOOP UNTIL 5.5< mox AND 5.5< moy
DRAW disk WITH SCALE(r)*SHIFT(bb)          !停止直前のボール表示

SUB play00
   SET DRAW MODE NOTXOR                    !2度書きで消える NOTXOR モード
   SET LINE COLOR 8
   LET nb=0
   LET b=p(1)*0.999                        !ボールの発射位置
   LET i=arg(s(1))+SQR(2)*PI/ma/1.1313     !ボールの発射角度
   LET m=m0*EXP(COMPLEX(0,i))              !ボールの step ベクトル
   LET t0=TIME
   DO
      DRAW disk WITH SCALE(r)*SHIFT(b)     !ボールを書く
      PLOT LINES : b;                      !履歴線を(書く・消す)
      SET DRAW mode explicit               !画像加工終り、表示の常時更新 (Normal)
      !------------
      IF 0< t2 THEN WAIT DELAY t2          !t2: 制御出力の休止秒。
      LET t1=TIME                          !t1: 前の周期の終り。※TIME は 約.05秒毎の更新。
      LET t2=t2+(.02-MOD(t1-t0,86400))/20  !20ms-検出周期(t1-t0)=偏差 →t2(積分 Gain=1/20)
      LET t0=t1                            !t0: 次の周期の始め= 前の周期の終り
      !------------
      LET bb=b
      LET b=b+m
      FOR n=1 TO ma
         IF n<>nb THEN                     !n=nb 反射完了フラグな為、n=nb 状態の進入×
            CALL Reflex                    !反射処理
            IF n=nb THEN EXIT FOR          !n=nb 反射完了、b の更新まで全ての反射処理×
         END IF
      NEXT n
      IF mbak=0 OR mlb=0 AND mrb=0 THEN
         LET mbak=2*(mlb+mrb)
      ELSE
         LET mbak=mbak-1.001/5             !左クリック押続け、約0.5秒後オートリピートへ入る
         WAIT DELAY .1                     !オートリピート間隔
      END IF
      MOUSE POLL mox,moy,mlb,mrb           !マウスの状態取得
      SET DRAW mode hidden                 !画像加工始め、表示更新を一時停止 (Abnormal)
      DRAW disk WITH SCALE(r)*SHIFT(bb)    !ボールだけを消す
   LOOP UNTIL mbak< mrb OR mbak< mlb       !左クリックは、Leading Edge 検出
   PLOT LINES
END SUB

!-------------------------------------------------------------
!n番辺のベクトル s(n)
! 1/s(n)=  水平に向ける回転移動ベクトルとして使用、
!     常に、水平相対な 姿勢で、交点、反射方向、、を求める
!               y =im(m) /re(m) *(x-re(b) )+im(b) …回転前の、ボール軌跡
!im(p1)=im(p2)= y =im(rm)/re(rm)*(x-re(rb))+im(rb) …回転後の、ボール軌跡
!
!  *s(n)= 再び元に戻す
!
! ※p1-1e-15, p2+1e-15 の 1e-15 は、真値が p1=x or p2=x
!   の場合に、計算丸めで x< p1 or p2< x 区間外になるのを防止
!-------------------------------------------------------------
SUB Reflex
   LET rm=m /s(n)                               !水平な「辺」に相対な m  (stepベクトル)
   IF 0<=im(rm) THEN EXIT SUB                   ! rm が「辺」に平行、又は上向き、交点なし
   LET rb=b /s(n)                               !   「辺」に相対な b  (m の延長予測点)
   LET rbb=bb /s(n)                             !   「辺」に相対な bb (1つ前の b) 描画済み先頭
   LET p1=p(n) /s(n) -1e-15                     !   「辺」に相対な下限
   LET p2=p(n+1) /s(n) +1e-15                   !   「辺」に相対な上限
   IF im(p1)< im(rb) THEN EXIT SUB              !     rb  が「辺」に未接触、交点なし
   IF im(rbb)<=im(p1) THEN EXIT SUB             !π< 内角を挟む他領域。rbb が「辺」以下、交点なし
   LET x=(im(p1)-im(rb))*re(rm)/im(rm)+re(rb)   !rm の延長 直線の「辺」との交点x
   IF x< re(p1) OR re(p2)< x THEN EXIT SUB      !        「辺」の区間外、交点なし
   LET m=conj(rm) *s(n)                         !反射方向 conj.   stepベクトル m 復元
   LET b=COMPLEX(x,im(p1)) *s(n)                !延長予測点を、反射点に切詰め、b 復元
   LET nb=n                                     !反射辺の番号、履歴
END SUB

END

!----------------------------------------------------
!左クリック:(順送り) 動作中の多角形3→15 上書き 循環。
!       新しい形で、上書きしていきます。
!       ( 過去1周分は、記憶 保持)
!
!右クリック:(逆送り) 動作中の多角形3←15 再生 循環。
!       過去1周分、上書きせず、巡回する。
!       ( 空の場合は、新しい形)
!
!(左 or 右) どちらも、長押しは、オート・リピートする。
!
!画面右上「停止ボタン」(左 or 右)クリック:終了。
!----------------------------------------------------
!上記を「ヘルプ」として、此処まで セーブ。
 

戻る