|
過去の神業数学らしきものの見え隠れについて、妙な事を、考えてみた。
十進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 右)クリック:終了。
!----------------------------------------------------
!上記を「ヘルプ」として、此処まで セーブ。
|
|