相談です

 投稿者:名無しさん  投稿日:2020年 2月 6日(木)18時15分10秒
   ありえないことが起きました。
 wait delayステートメントの制御が利かないのです。
 以下のソースコードは、3D空間に交わる2直線を描画したものです。プログのシナリオは、まず3次元座標軸を描画し、次に
2本の直線を1本ずつ描画し、2直線の交点をマークする、というものです。因みに2直線の方程式は
        (3x-1)/2=(2-y)=4-z
        (x-5)/4=y=(3-2z)/3
です。デバッグの最中にどっちがどの直線だかわからなくなったので、wait delayを使って時間差をつけようと思い、ご覧のように
2直線の描画の間にwait delayステを挿入しました。ところが期待の時間差は2直線の間には現れず、座標軸描画と1本目の直線の描画の
間に現れてしまったのです。すなわち、座標軸描画、wait、2直線の描画、交点の描画、というふうに。HTMLじゃあるまいし。
 たぶんこれは十進Bのエラーではなく、我がポンコツのsony時代のVAIOのWINDOWS XP SP0 機の起こしたエラーでしょう(泣)。今まで全く経験しなかったバグですから。実は今まで愛用してた64BIT 7機が壊れてしまったので最近コイツに乗り換えたものです。7 8 10の64BIT機ならば我が優秀な十進BASICでは起こりえないことなのでしょう。お金もないので上位OSの機種に買い換えることもできません(再び泣)。
 このオンボロ機でうまくWAITを挿入させる工夫は、無いものでしょうか?

PUBLIC NUMERIC do,sya(4,4)
DIM rx(4,4),ry(4,4),cver(4,4),saki(3,4),a(4),v(4),vp(4),vm(4),m(4,4),p(4),c(3,3),p1(3),p2(3)
LET DO=3.14159265358979/180
MAT READ cver
DATA 0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1
call yロオテ(ry,20*do)
call xロオテ(rx,30*do)
MAT sya=cver*ry*rx
CALL black

SET WINDOW -5,5,-5,5
CLEAR
SET TEXT HEIGHT .324
CALL アクシス
read p1(1),p1(2),p1(3),x1,y1,z1
data 1,2,4,2,-3,-1
LET p1(1)=p1(1)/3
LET x1=x1/3
CALL 直線(p1(1),p1(2),p1(3),x1,y1,z1)

WAIT DELAY .5     !問題の箇所!

READ p2(1),p2(2),p2(3),x2,y2,z2
DATA 5,0,3,4,1,-3
LET p2(3)=p2(3)/2
LET z2=z2/2
CALL 直線(p2(1),p2(2),p2(3),x2,y2,z2)
CALL 連立直線xy不含不定
MAT p=p*sya
SET AREA COLOR 1
DRAW disk WITH SCALE(.1)*SHIFT(p(1),p(2))

SUB 連立直線xy不含不定
   MAT redim p(3)
   MAT c=ZER
   LET c(1,1)=y1
   LET p11d=y1*p1(1)
   LET c(1,2)=-x1
   LET p12d=-x1*p1(2)
   LET c(2,1)=y2
   LET p21d=y2*p2(1)
   LET c(2,2)=-x2
   LET p22d=-x2*p2(2)
   LET c(3,2)=z1
   LET p32d=z1*p1(2)
   LET c(3,3)=-y1
   LET p33d=-y1*p1(3)
   LET p(1)=p12d+p11d
   LET p(2)=p22d+p21d
   LET p(3)=p33d+p32d
   call 連立方程式(c,p)
   MAT PRINT p
   MAT redim p(4)
end sub
SUB 直線(x1,y1,z1,l,m,n)
   LET a(1)=x1
   LET a(2)=y1
   LET a(3)=z1
   LET v(1)=l
   LET v(2)=m
   LET v(3)=n
   SET LINE width 1
   MAT vp=10*v
   MAT vm=(-10)*v
   MAT vp=a+vp
   MAT vm=a+vm
   MAT vp=vp*sya
   MAT vm=vm*sya
   PLOT LINES:vm(1),vm(2);vp(1),vp(2)
END SUB
END


EXTERNAL SUB アクシス
DIM saki(3,4),v1(4),v2(4),v3(4),z90(4,4),m(4,4)
LET v1(1)=8
LET v2(2)=4.5
LET v3(1)=5
MAT READ z90
DATA 0,0,1,0,0,1,0,0,-1,0,0,0,0,0,0,1
MAT READ saki
DATA 0,0,0,1,-.112,-.032,0,1,-.112,.032,0,1
SET LINE width 1
DRAW 三線 WITH sya
SET TEXT font"MS ゴシック",0
SET TEXT COLOR 1
SET TEXT JUSTIFY"left","top"
PLOT label,AT .0,-.048:"O"
CALL 位置ベク傾き(v1,saki)
IF v1(1)^2+v1(2)^2>1e-2THEN PLOT AREA:saki(1,1),saki(1,2);saki(2,1),saki(2,2);saki(3,1),saki(3,2)
MAT READ saki
DATA 0,0,0,1,-.112,-.032,0,1,-.112,.032,0,1
CALL 位置ベク傾き(v2,saki)
IF v2(1)^2+v2(2)^2>1e-2THEN PLOT AREA:saki(1,1),saki(1,2);saki(2,1),saki(2,2);saki(3,1),saki(3,2)
MAT READ saki
DATA 0,0,0,1,-.112,-.032,0,1,-.112,.032,0,1
CALL 位置ベク傾き(v3,saki)
IF v3(1)^2+v3(2)^2>1e-2THEN PLOT AREA:saki(1,1),saki(1,2);saki(2,1),saki(2,2);saki(3,1),saki(3,2)
PICTURE 三線
   SET TEXT FONT"Times New Roman Italic",0
   SET TEXT COLOR 3
   SET AREA COLOR 6
   SET TEXT justify"center","half"
   PLOT 0,0;v1(1),0
   PLOT label,AT v1(1)+.36,0:"x"
   PLOT 0,0;0,v2(2)
   PLOT label,AT 0,v2(2)+.24:"y"
   MAT m=TRANSFORM
   MAT v1=v1*m
   MAT v2=v2*m
   DRAW ゼットジク WITH z90
END PICTURE
PICTURE ゼットジク
   PLOT 0,0;v3(1),0
   PLOT label,AT v3(1)+.24,0:"z"
   MAT m=TRANSFORM
   MAT v3=v3*m
END PICTURE
END SUB
EXTERNAL SUB 位置ベク傾き(v(),a(,))
DIM m(4,4)
LET t=angle(v(1),v(2))
MAT m=IDN
LET m(1,1)=COS(t)
LET m(1,2)=SIN(t)
LET m(2,1)=-SIN(t)
LET m(2,2)=COS(t)
MAT m=m*SHIFT(v(1),v(2))
MAT a=a*m
END SUB

external sub 連立方程式(m(,),x())
mat m=inv(m)
mat x=m*x
end sub
external sub yロオテ(m(,),t)
MAT m=IDN
LET m(1,1)=COS(t)
LET m(1,3)=SIN(t)
LET m(3,1)=-SIN(t)
LET m(3,3)=COS(t)
end sub
external sub xロオテ(m(,),t)
MAT m=IDN
LET m(2,2)=COS(t)
LET m(2,3)=SIN(t)
LET m(3,2)=-SIN(t)
LET m(3,3)=COS(t)
end sub
external sub black
SET COLOR MIX(0)0,0,0
SET COLOR MIX(1)1,1,1
CLEAR
end sub
 

Re: 相談です

 投稿者:SHIRAISHI Kazuo  投稿日:2020年 2月 6日(木)18時38分31秒
  > No.4781[元記事へ]

名無しさんさんへのお返事です。
WAIT DELAYの替わりにCHARACTER INPUT TIMEOUTを使うとどうなりますか。

110 WHEN EXCEPTION IN
120    CHARACTER INPUT TIMEOUT 0.5 :dummy$
130 USE
140 END WHEN

0.5秒だけ待ってキー入力がないと次に進みます。

http://hp.vector.co.jp/authors/VA008683/

 

Re: 相談です

 投稿者:名無しさん  投稿日:2020年 2月 6日(木)19時17分31秒
  > No.4783[元記事へ]

SHIRAISHI Kazuoさんへのお返事です。
お速い対応!!

> 名無しさんさんへのお返事です。
> WAIT DELAYの替わりにCHARACTER INPUT TIMEOUTを使うとどうなりますか。
>
> 110 WHEN EXCEPTION IN
> 120    CHARACTER INPUT TIMEOUT 0.5 :dummy$
> 130 USE
> 140 END WHEN
>
> 0.5秒だけ待ってキー入力がないと次に進みます。
>

inputしないとエラーになっちゃうから例外処理を入れなきゃならないヤツですよね?
やってみます
 

戻る