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 |