もっと高速な方法はあるでしょうか? 島村1243 2007/12/13 14:21:55 (修正1回) └続き 島村1243 2007/12/13 14:23:05 (修正1回) ├(1)について(処理手順の改良) 山中和義 2007/12/14 08:55:07 │├!もったいない、整理すれば、4倍速。 SECOND 2007/12/14 21:34:04 ││└確かに速いです。 島村1243 2007/12/14 22:33:52 ││ └どっちでしょう? SECOND 2007/12/14 22:50:11 (修正1回) │└20秒速くなりました。 島村1243 2007/12/14 22:06:46 └(3)について各点での流線 山中和義 2007/12/15 09:43:05 ├!等ポテンシャルを色の濃淡で表現する 山中和義 2007/12/15 11:03:55 └これを利用すると流れの方向がわかるので、... 山中和義 2007/12/15 20:11:13 └とても数理的で良いですね。 島村1243 2007/12/15 23:15:50 (修正1回) └接地導体球の作画に問題が有る様 島村1243 2007/12/16 07:37:08 └対策案できました。 島村1243 2007/12/16 10:44:04 (修正1回)
Re: 接地導体球の作画に問題が有る様 |
返事を書く ノートメニュー |
島村1243 <bjllmpcujp> 2007/12/16 10:44:04 ** この記事は1回修正されてます | |
対策案できました。
山中さんがご教示くださったタートルグラフィックスの手法と、SECONDさんがご教示くださった高速 描画手法を組み合わせて、(複素ポテンシャル関数は諦めて)普通のポテンシャル関数を使って描画 したら、(電位分布は誤差の為に線に幅が生じていますが)正しい分布状態の作図に成功しましたの で以下に示します。 お二方には感謝申し上げます。 !----点電荷と接地導体球の電場(電位分布と電気力線分布)作図---- !-------山中和義氏とSECOND氏の方法を合体---- LET Xa=-10 LET Xb=-Xa+4 LET Ya=Xa-2 LET Yb=-Ya+2 SET WINDOW Xa,Xb,Ya,Yb !描画範囲 DRAW grid ASK PIXEL SIZE (Xa,Ya; Xb,Yb) a,b !ドット換算 LET c_Div=3 !分解数 LET dx=(Xb-Xa)/a/c_Div !描画範囲内の描画対象となるドット数を得る LET dy=(Yb-Ya)/b/c_Div LET cEps=1E-3 !誤差 ※精度が気になる!? LET r=1 !導体球の半径 LET a1=4 !点電荷のx座標 LET a2=r^2/a1 !影像電荷のx座標 LET q1=1 !点電荷の大きさ LET q2=-r/a1*q1 !影像電荷の大きさ DEF f(x,y)=q1/SQR((x-a1)^2+y^2)+q2/SQR((x-a2)^2+y^2) !合成電位関数 SET AREA COLOR "red" !点電荷の位置に赤丸印を表示 DRAW disk WITH SCALE(0.1)*SHIFT(a1,0) SET AREA COLOR "green" !接地導体球の位置に緑丸印を表示 DRAW disk WITH SCALE(r)*SHIFT(0,0) !--電位分布の作図--- SET POINT STYLE 1 FOR y=Ya TO Yb STEP dy ![Ya,Yb] FOR x=Xa TO Xb STEP dx ![Xa,Xb] IF x<>a1 AND x<>a2 THEN LET w=f(x,y) !点(x,y)における合成電位 FOR wb=0 TO 0.5 STEP 0.02 !等電位幅値の設定 IF ABS(w-wb) < cEps THEN IF wb<=0 THEN SET POINT COLOR "black" ELSE SET POINT COLOR "red" PLOT POINTS: x,y !点画 END IF NEXT wb END IF NEXT x NEXT y !----電気力線の描画---- LET L=0.2 !移動量 LET h=0.001 !増分 FOR th=0 TO 360 STEP 3 !点電荷から放射状に LET theta=RAD(th) LET x=a1 LET y=0 PLOT LINES: x,y; DO WHEN EXCEPTION IN LET w=f(x,y) !電位を得る LET wx=f(x+h,y) !偏微分係数から LET wy=f(x,y+h) LET vx=-(wx-w)/h !∂f/∂x LET vy=-(wy-w)/h !∂f/∂y LET theta=ANGLE(vx,vy) !成分に応じたベクトルを得る USE END WHEN LET x=x+L*COS(theta) !移動させる LET y=y+L*SIN(theta) PLOT LINES: x,y; IF ABS(x)>Xb THEN EXIT DO !表示範囲外なら IF ABS(y)>Yb THEN EXIT DO IF ABS(x*x+y*y)<r THEN EXIT DO !接地導体球内なら LOOP PLOT LINES !次へ NEXT th !---画面仕上げ用(点電荷位置・接地導体球)再描画---- SET AREA COLOR "red" !点電荷の位置に赤丸印を表示 DRAW disk WITH SCALE(0.1)*SHIFT(a1,0) SET AREA COLOR "green" !接地導体球の位置に緑丸印を表示 DRAW disk WITH SCALE(r)*SHIFT(0,0) END |
└ポテンシャル関数f(x,y)なら、電位分布は等... 山中和義 2007/12/16 13:56:21 └完璧に目的達成です! 島村1243 2007/12/16 19:04:03 (修正1回) └プログラムの続き 島村1243 2007/12/16 19:05:45