新しく発言する EXIT インデックスへ
z=f(x,y)のグラフ(3DPLOT.BASメッシュ編)

  z=f(x,y)のグラフ(3DPLOT.BASメッシュ編) 山中和義 2007/04/18 21:14:56  (修正2回)
  !陰線処理min・max法 山中和義 2007/04/21 14:34:22  (修正2回)

  z=f(x,y)のグラフ(3DPLOT.BASメッシュ編) 山中和義 2007/04/18 21:14:56  (修正2回) ツリーへ

z=f(x,y)のグラフ(3DPLOT.BASメッシュ編) 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/04/18 21:14:56 ** この記事は2回修正されてます
OpenGLふ〜のサブルーチンを使用した空間の曲面をプロットするルーチンです。

・陽関数z=f(x,y)のグラフ
・媒体変数表示x=f(u,v)、y=g(u,v)、z=h(u,v)のグラフ
・XY平面上の曲線y=f(x)をx軸で回転させた回転体のグラフ
が描けます。

http://www.urban.ne.jp/home/kz4ymnk/seminar/basic/3dplot.lzh

  !陰線処理min・max法 山中和義 2007/04/21 14:34:22  (修正2回) ツリーへ

Re: z=f(x,y)のグラフ(3DPLOT.BASメッシュ編) 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/04/21 14:34:22 ** この記事は2回修正されてます
!陰線処理 min・max法

DEF f(x,y)=COS(SQR(x*x+y*y))+COS(3*SQR(x*x+y*y)) !陽関数 ※
LET Xa=-3 !X=[-3,3]
LET Xb=3
LET Ya=-3 !Y=[-3,3]
LET Yb=3

SET WINDOW Xa*2,Xb*2,Ya*2,Yb*2 !投影面 ※


SET POINT STYLE 1
LET c_Div=200 !分割数
LET dx=(Xb-Xa)/c_Div
LET dy=(Yb-Ya)/c_Div

ASK WINDOW x1,x2,y1,y2
ASK PIXEL SIZE (x1,y1; x2,y2) a,b !ドット換算
DIM ymin(a),ymax(a)
FOR i=1 TO a !最大、最小判定の初期化
LET ymin(i)=y2
LET ymax(i)=y1
NEXT i


! z y で表示する
! │/
! ・─x
FOR i=c_Div-1 TO 0 STEP -1 !X座標
FOR j=0 TO c_Div-1 !Y座標
LET x=Xa+dx*i !空間上の点を計算する
LET y=Ya+dy*j
LET z=f(x,y)

CALL rotz(x,y,z,-30*PI/180) !回転変換
CALL rotx(x,y,z,-70*PI/180)
LET px=x !投影
LET py=y

LET xx=pixelx(px) !ドット座標へ
IF py<ymin(xx) THEN !可視なら
LET ymin(xx)=py
PLOT POINTS:px,py
END IF
IF py>ymax(xx) THEN
LET ymax(xx)=py
PLOT POINTS:px,py
END IF
NEXT j
NEXT i

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

END


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