新しく発言する  EXIT  インデックスへ
ランダムドット・ステレオグラム

  ランダムドット・ステレオグラム ひでき 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してみませんか。最後になりましたが、白石先生、山中様いつもお世話になっております。「アナモルフォーズ」の時も、ありがとうございました。今後とも、よろしくお願いいたします。


 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。