新しく発言する  EXIT  インデックスへ
もっと高速な方法はあるでしょうか?

  もっと高速な方法はあるでしょうか? 島村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回)
        └ポテンシャル関数f(x,y)なら、電位分布は等... 山中和義 2007/12/16 13:56:21 
         └完璧に目的達成です! 島村1243 2007/12/16 19:04:03  (修正1回)

Re: ポテンシャル関数f(x,y)なら、電位分布は等...  返事を書く  ノートメニュー
島村1243 <bjllmpcujp> 2007/12/16 19:04:03 ** この記事は1回修正されてます
完璧に目的達成です!

山中さん、幾度ものご教示有難う御座いました。
当初は複素ポテンシャル関数を用いなければ等電位線と電気力線の同時高速作画は出来ないのでは
ないかと思い、その関数を利用する方法ばかり考えていました。
今回ご教示頂いた事で、微係数を上手く利用すると複雑な作画も高速処理が出来るということを大変興味
深く勉強させていただきました。本当に有難う御座いました。

お礼の意味も込めて山中さんのコードを利用し纏めた全コードを記します。
!--1個の点電荷と接地導体球が存在する電場の電位・電気力線分布作図----
!<山中和義氏作の描画手法をまとめたもの>

!----描画座標・条件設定
LET Xa=-10
LET Xb=-Xa+4
LET Ya=Xa-2
LET Yb=-Ya+2
SET WINDOW Xa,Xb,Ya,Yb !描画範囲
DRAW grid
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 LINE COLOR "black"
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)

!SET WINDOW -6,6,-6,6 !表示領域
!SET WINDOW -15,15,-15,15 !表示領域
!DRAW grid !座標

          └プログラムの続き 島村1243 2007/12/16 19:05:45 

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