ランダムドット・ステレオグラム ひでき 2008/01/28 23:57:58 ├(2)について 山中和義 2008/01/29 10:27:01 │└回転ランダムドット・ステレオグラムを作っ... ひでき 2008/01/31 23:42:09 ├(1)について 山中和義 2008/01/29 10:46:59 (修正1回) ├ワイヤーフレームのステレオ画像(擬似3D... 山中和義 2008/02/02 20:48:40 │└!2次元の絵(DRAW文)のステレオペア 山中和義 2008/02/04 11:59:05 (修正1回) └ネットで、ステレオグラムについて検索して... ひでき 2008/02/03 13:30:56
ランダムドット・ステレオグラム ひでき 2008/01/28 23:57:58 ツリーへ
ランダムドット・ステレオグラム |
返事を書く ノートメニュー |
ひでき <jweuhhncel> 2008/01/28 23:57:58 | |
何森仁先生の「ステレオグラムをつくろう」という本を参考にして、関数のランダムドット・ステレオグラムをつくりました。
一応、正しく動作するのですが、次の2点の改造方法をお教えいただけませんか。 (1)関数をプログラムの中に埋め込むのではなく、入力できるようにしたい。(input文で可能なのでしょうか。tryしましたが、うまくいきませんでした。) (2)行番号なしのプログラムにしたい。 よろしくお願いいたします。 10 !ランダムドット・ステレオグラム 20 RANDOMIZE 30 LET h=2 32 LET k=40 34 LET m=40 36 LET a=10 40 SET WINDOW -5,5,-5,5 50 INPUT PROMPT "回数=":n1 60 FOR n=1 TO n1 70 LET x0=10*RND-5 72 LET y0=10*RND-5 74 LET col=INT(7*RND)+1 76 SET AREA COLOR col 80 PLOT AREA: x0,-y0;x0+0.05,-y0;x0+0.05,-y0-0.05;x0,-y0-0.05 90 FOR s=1 TO -1 STEP -2 100 LET xg=x0 102 LET yd=y0 110 LET x=xg 112 LET y=yd 114 LET z=k 116 LET m1=1 120 LET xs=(xg+h*s)/a 122 LET ys=yd/a 124 LET zs=-m/a 130 FOR c=1 TO 3 140 LET x=x+xs 142 LET y=y+ys 144 LET z=z+zs 146 CALL kansuu(x,y) 150 LET m2=z-rittaiz 160 IF m1*m2>0 THEN 162 LET m1=m2 164 GOTO 140 166 END IF 170 LET m1=m2 172 LET xs=-xs/a 174 LET ys=-ys/a 176 LET zs=-zs/a 180 NEXT c 190 CALL zahyo(x,y,z) 200 IF ABS(xg)>5 THEN 220 210 PLOT AREA: xg,-yd;xg+0.05,-yd;xg+0.05,-yd-0.05;xg,-yd-0.05 215 GOTO 110 220 NEXT s 230 NEXT n 250 SUB zahyo(x,y,z) 260 LET xg=((k-z)*h*s+m*x)/(k+m-z) 270 LET yd=(m*y)/(k+m-z) 280 END SUB 290 SUB kansuu(x,y) 300 LET rittaiz=COS(SQR(x^2+y^2)) 310 END sub END |
├(2)について 山中和義 2008/01/29 10:27:01 ツリーへ
Re: ランダムドット・ステレオグラム |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/01/29 10:27:01 | |
(2)について
!ランダムドット・ステレオグラム RANDOMIZE LET h=2 LET k=40 LET m=40 LET a=10 SET WINDOW -5,5,-5,5 INPUT PROMPT "回数=":n1 FOR n=1 TO n1 LET x0=10*RND-5 LET y0=10*RND-5 LET col=INT(7*RND)+1 SET AREA COLOR col PLOT AREA: x0,-y0;x0+0.05,-y0;x0+0.05,-y0-0.05;x0,-y0-0.05 FOR s=1 TO -1 STEP -2 LET xg=x0 LET yd=y0 DO !!!110 LET x=xg LET y=yd LET z=k LET m2=1 !--LET m1=1 LET xs=(xg+h*s)/a LET ys=yd/a LET zs=-m/a FOR c=1 TO 3 DO !--140 LET m1=m2 !-- LET x=x+xs LET y=y+ys LET z=z+zs CALL kansuu(x,y) LET m2=z-rittaiz LOOP WHILE m1*m2>0 !--IF m1*m2>0 THEN !--LET m1=m2 !--GOTO 140 !--END IF !--LET m1=m2 LET xs=-xs/a LET ys=-ys/a LET zs=-zs/a NEXT c CALL zahyo(x,y,z) IF ABS(xg)>5 THEN EXIT DO !!!220 PLOT AREA: xg,-yd;xg+0.05,-yd;xg+0.05,-yd-0.05;xg,-yd-0.05 LOOP !!!GOTO 110 !!!220 NEXT s NEXT n SUB zahyo(x,y,z) LET xg=((k-z)*h*s+m*x)/(k+m-z) LET yd=(m*y)/(k+m-z) END SUB SUB kansuu(x,y) LET rittaiz=COS(SQR(x^2+y^2)) END SUB END 参照.過去掲示板「センター試験」内 http://freebbs.around.ne.jp/article/b/basic/103/agebsy/zhdmjo.html#zhdmjo |
│└回転ランダムドット・ステレオグラムを作っ... ひでき 2008/01/31 23:42:09 ツリーへ
Re: (2)について |
返事を書く ノートメニュー |
ひでき <jweuhhncel> 2008/01/31 23:42:09 | |
回転ランダムドット・ステレオグラムを作ってみました。
山中様に教えていただいたプログラムに回転を加えてみました。 z軸の周りの回転は、正しくできているのですが、x軸方向は 自信が有りません。数学的に正しくなければ、どなたか間違いを 指摘していただけませんか。よろしくお願いします。 !ランダムドット・ステレオグラム RANDOMIZE LET h=2 LET k=40 LET m=40 LET a=10 SET WINDOW -5,5,-5,5 INPUT PROMPT "回数=":n1 INPUT PROMPT "z軸周りに何[°]回転 =":kz INPUT PROMPT "x軸周りに何[°]回転 =":kx FOR n=1 TO n1 LET x0=10*RND-5 LET y0=10*RND-5 LET col=INT(7*RND)+1 SET AREA COLOR col PLOT AREA: x0,-y0;x0+0.05,-y0;x0+0.05,-y0-0.05;x0,-y0-0.05 FOR s=1 TO -1 STEP -2 LET xg=x0 LET yd=y0 DO LET x=xg LET y=yd LET z=k LET m2=1 LET xs=(xg+h*s)/a LET ys=yd/a LET zs=-m/a FOR c=1 TO 3 DO LET m1=m2 LET x=x+xs LET y=y+ys LET z=z+zs CALL kansuu(x,y) LET m2=z-rittaiz LOOP WHILE m1*m2>0 LET xs=-xs/a LET ys=-ys/a LET zs=-zs/a NEXT c CALL zahyo(x,y,z) IF ABS(xg)>5 THEN EXIT DO PLOT AREA: xg,-yd;xg+0.05,-yd;xg+0.05,-yd-0.05;xg,-yd-0.05 LOOP NEXT s NEXT n SUB zahyo(x,y,z) LET xg=((k-z)*h*s+m*x)/(k+m-z) LET yd=(m*y)/(k+m-z) END SUB SUB kansuu(x,y) LET xz=x*COS(RAD(kz))-y*SIN(RAD(kz)) LET yz=x*SIN(RAD(kz))+y*COS(RAD(kz)) LET yx=z*SIN(RAD(kx))+yz*COS(RAD(kx)) LET zx=3*(COS(xz)+COS(yx)) !描画する関数 LET rittaiz=zx*COS(RAD(kx))-yz*SIN(RAD(kx)) END SUB END |
├(1)について 山中和義 2008/01/29 10:46:59 (修正1回) ツリーへ
Re: ランダムドット・ステレオグラム |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/01/29 10:46:59 ** この記事は1回修正されてます | |
(1)について
evalは、インタプリタ系の言語(JavaScript、Perlなど)に実装されているものですが、 BASICにはありません。 マニアックな実現方式ですが、 参照. 外部プログラムの利用 1.BASICプログラムを書き出して実行する http://hp.vector.co.jp/authors/VA008683/ExtProg.htm 改修にあたって、プログラムの中程の CALL kansuu(x,y) LET m2=z-rittaiz は LET m2=z-f(x,y) プログラムの終りの SUB kansuu(x,y) LET rittaiz=COS(SQR(x^2+y^2)) END SUB は DEF f(x,y)=COS(SQR(x^2+y^2)) へ変更して、適用すればよいかと思います。 |
├ワイヤーフレームのステレオ画像(擬似3D... 山中和義 2008/02/02 20:48:40 ツリーへ
Re: ランダムドット・ステレオグラム |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/02/02 20:48:40 | |
ワイヤーフレームのステレオ画像(擬似3DCG手法)
物体の回転角を左右ずらして、カメラ(視点)位置を変更したかのような画像を描きます。 ※SAMPLEフォアルダ内 3DPLOT.BASを修正 SUB rotx(x,y,z,a) LET y0=y*cos(a)-z*sin(a) LET z0=y*sin(a)+z*cos(a) LET y=y0 LET z=z0 END SUB SUB roty(x,y,z,a) LET x0=x*cos(a)+z*sin(a) LET z0=-x*sin(a)+z*cos(a) LET x=x0 LET z=z0 END SUB SUB rotz(x,y,z,a) LET x0=x*cos(a)-y*sin(a) LET y0=x*sin(a)+y*cos(a) LET x=x0 LET y=y0 END SUB SUB convert(x,y,z) CALL rotz(x,y,z,RAD(-30+B)) CALL rotx(x,y,z,RAD(-60)) END SUB SUB PlotTo(x,y,z) LET x1=x !save it LET y1=y LET z1=z CALL convert(x1,y1,z1) PLOT LINES:x1+A,y1; END SUB SUB PlotText(x,y,z,s$) CALL convert(x,y,z) PLOT TEXT ,AT x+A,y: s$ END SUB !DEF f(x,y)=x^2-y^2 !曲面 !DEF f(x,y)=(COS(x*5)+COS(y*5))/5 DEF f(x,y)=COS(SQR((x*15)^2+(y*15)^2))/8 SET bitmap SIZE 601,301 !表示領域 LET s=1.5 SET WINDOW -s*2.5,s*2.5,-s,s LET A=1.7 !左右の間隔 LET B=-3 !±回転角 CALL axes CALL DRAW LET A=-A LET B=-B CALL axes CALL DRAW SUB DRAW !ワイヤーフレームで曲面を描く FOR x=-1 TO 1 step 0.1 FOR y=-1 TO 1 step 0.1 LET z=f(x,y) CALL PlotTo(x,y,z) NEXT y PLOT LINES NEXT x FOR y=-1 TO 1 step 0.1 FOR x=-1 TO 1 step 0.1 LET z=f(x,y) CALL PlotTo(x,y,z) NEXT x PLOT LINES NEXT y END SUB SUB axes !xyz軸 SET LINE COLOR 4 CALL PlotTo(0,0,0) CALL PlotTo(1,0,0) PLOT LINES SET LINE COLOR 3 CALL PlotTo(0,0,0) CALL PlotTo(0,1,0) PLOT LINES SET LINE COLOR 2 CALL PlotTo(0,0,0) CALL PlotTo(0,0,1) PLOT LINES SET LINE COLOR 1 CALL PlotText(1,0,0,"x") CALL PlotText(0,1,0,"y") CALL PlotText(0,0,1,"z") END SUB END |
│└!2次元の絵(DRAW文)のステレオペア 山中和義 2008/02/04 11:59:05 (修正1回) ツリーへ
Re: ワイヤーフレームのステレオ画像(擬似3D... |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2008/02/04 11:59:05 ** この記事は1回修正されてます | |
!2次元の絵(DRAW文)のステレオペア
PICTURE Moon SET AREA COLOR 6 DRAW disk WITH SCALE(0.4) END PICTURE PICTURE Tree SET AREA COLOR 12 !幹 PLOT AREA:-0.075,0; 0.075,0; 0.025,3; -0.025,3 SET AREA COLOR 10 !葉 DRAW disk WITH SCALE(0.4)*SHIFT(0,3) DRAW disk WITH SCALE(0.5)*SHIFT(-0.5,2.5) DRAW disk WITH SCALE(0.5)*SHIFT(0.5,2) END PICTURE PICTURE House SET AREA COLOR 0 PLOT AREA: 0,1; 0,0; 2,0; 2,1 !壁 SET AREA COLOR 2 PLOT AREA: -0.6,1; 2.6,1; 2,2; 0,2 !屋根 SET AREA COLOR 10 PLOT AREA: 0.1,0; 0.1,0.8; 0.5,0.8; 0.5,0 !ドア SET AREA COLOR 7 PLOT AREA: 1.4,0.4; 1.9,0.4; 1.9,0.8; 1.4,0.8 !窓 SET AREA COLOR 12 PLOT AREA: 1.7,2; 1.7,2.3; 1.5,2.3; 1.5,2 !煙突 END PICTURE PICTURE Ground SET AREA COLOR 160 PLOT AREA: 0,0; XMAX,0; XMAX,4; 0,4 END PICTURE PICTURE Mount SET AREA COLOR 125 DRAW disk WITH SCALE(2)*SHIFT(1,0) DRAW disk WITH SCALE(1.5)*SHIFT(4,0) DRAW disk WITH SCALE(2)*SHIFT(6,0) END PICTURE LET XMAX=8 LET YMAX=8 SET bitmap SIZE 600,300 !横倍 SET WINDOW 0,XMAX,0,YMAX*2 !表示領域 LET ZMAX=10 DEF Z(x)=-(x/ZMAX)*(XMAX/10) !奥ゆきに応じて左右にずらして配置する SET VIEWPORT 0,0.5,0,1 !左半分へ !左側(通常の描画) ※第1象限x=[0,XMAX]、y=[0,YMAX] SET AREA COLOR 1 PLOT AREA: 0,0; XMAX,0; XMAX,YMAX; 0,YMAX !夜空 DRAW Mount WITH SHIFT(0,4) DRAW Ground !※重ね書きで山の下部を消去する DRAW Moon WITH SHIFT(5,7) DRAW Tree WITH SCALE(0.8)*SHIFT(7,3) DRAW House WITH SHIFT(4,2.5) DRAW Tree WITH SHIFT(2,2) !STOP !右側(ステレオペア) SET VIEWPORT 0.5,1,0,1 !右半分へ SET AREA COLOR 1 PLOT AREA: 0,0; XMAX,0; XMAX,YMAX; 0,YMAX DRAW Mount WITH SHIFT(0,4)*SHIFT(Z(3),0) !※立体視したい絵に奥ゆきを付加する DRAW Ground DRAW Moon WITH SHIFT(5,7)*SHIFT(Z(3),0) DRAW Tree WITH SCALE(0.8)*SHIFT(7,3)*SHIFT(Z(4),0) DRAW House WITH SHIFT(4,2.5)*SHIFT(Z(6),0) DRAW Tree WITH SHIFT(2,2)*SHIFT(Z(9),0) END |
└ネットで、ステレオグラムについて検索して... ひでき 2008/02/03 13:30:56 ツリーへ
Re: ランダムドット・ステレオグラム |
返事を書く ノートメニュー |
ひでき <jweuhhncel> 2008/02/03 13:30:56 | |
ネットで、ステレオグラムについて検索してみて、
国土地理院の立体視サービス、北海道の高校理科の先生による 雪のステレオグラム(顕微鏡で見た雪の構造の感動を伝えるため)、主成分分析結果の3次元表示にステレオグラムを用いる 福井高専の物質化学科など、実用目的でステレオグラムが 利用されているのを知りました。 また、東海大学工学部応用理学科教授の山崎正之氏が、 ランダムドット・ステレオペアを作り、それをパスワードを 隠すための手段として研究されていることも知りました。 立体テレビも現在研究中といわれ現在、「立体視」は、 重要なキーワードであると思い注目しています。 何森 仁先生が、著書の中で葛飾北斎の作品をステレオグラム化 し、北斎が強調したいであろう所を表現しているのも、面白い 試みだと思いました。十進BASICでは、画像の加工もできるので、このようなことが、自分で作成できると楽しいでしょうね。残念ながら、現在の私には、無理なので、どなたかtryしてみませんか。最後になりましたが、白石先生、山中様いつもお世話になっております。「アナモルフォーズ」の時も、ありがとうございました。今後とも、よろしくお願いいたします。 |