新しく発言する EXIT インデックスへ
また教えて下さい

  また教えて下さい ゆみ 2004/11/28 22:10:46 
  このような場合の対処は、前回と同様でfor文... 青木太一 2004/11/29 08:39:51 
   ├訂正 青木太一 2004/11/29 08:51:25 
   └訂正2 青木太一 2004/12/02 08:28:47 

  また教えて下さい ゆみ 2004/11/28 22:10:46  ツリーへ

また教えて下さい 返事を書く
ゆみ 2004/11/28 22:10:46
 教えていただいたよう、以下のように、x軸の場合も考えてみました。しかし、画面いっぱいに、双曲線が表示できません。
 四隅の隙間があくんです。
 自分で、考えても分からないので、申し訳ないのですが、また教えて下さい。

OPTION ARITHMETIC COMPLEX
SET POINT STYLE 1
LET s=3
LET win=s
SET WINDOW -win,win,-win,win
DRAW grid
LET sx = Im(COMPLEX(s,s)^2)
FOR x = -sx TO sx STEP .5 !x=a
LET sy = s^2-(x/(2*s))^2
FOR y=-sy TO sy STEP win/500
SET POINT COLOR 3
PLOT POINTS: x,y
IF y<>0 THEN
LET z=COMPLEX(x,y)
LET w=SQR(z)
SET POINT COLOR 2
PLOT POINTS: Re(w),Im(w)
PLOT POINTS: Re(-w),Im(-w)
END IF
NEXT y
NEXT x


END

  このような場合の対処は、前回と同様でfor文... 青木太一 2004/11/29 08:39:51  ツリーへ

Re: また教えて下さい 返事を書く
青木太一 2004/11/29 08:39:51
このような場合の対処は、前回と同様でfor文の範囲を調整すればいいと思います。

「対処法1 てっとりばやい方法」
-3,3,-3,3からはみ出してもいいのなら、今回は線の長さが足りないだけのようなのでsyを適当に大きい値にしていってみてはどうでしょう?

「対処法2 慎重な方法」
はみ出してはいけないとなると、複素変換で考えなくてはいけないですが、前回のプログラム(y=b横線の変換)の成果を利用できます。
前回のプログラムの画面範囲をさらに広げたこのプログラムをうごかして出てくる図を見てください。

OPTION ARITHMETIC COMPLEX
SET POINT STYLE 1
LET s=3
LET win=s*7
SET WINDOW -win,win,-win,win
DRAW grid
LET sy = Im(COMPLEX(s,s)^2)
FOR y = -sy TO sy STEP .5 !y=b
LET sx = s^2-(y/(2*s))^2
FOR x=-sx TO sx STEP win/500
SET POINT COLOR 3
PLOT POINTS: x,y
IF x<>0 THEN
LET z=COMPLEX(x,y)
LET w=SQR(z)
SET POINT COLOR 2
PLOT POINTS: Re(w),Im(w)
PLOT POINTS: Re(-w),Im(-w)
END IF
NEXT x
NEXT y
END

このようにw=sqr(z)というのは、
「縦に置いたラグビーボールのような形の領域(z)」が
「小さい正方形状の領域(w)」
に変換される操作です。
この性質は別に入力が横線だろうと縦線だろうと変わるわけではないので、今回もsx,syは縦置きのラグビーボールのような領域を表すように作りましょう。
(ここで、「今回は横線だからラグビーボールも横置きだろう」と考えたのがゆみさんのミスだと思われます)
・LET sy = Im(COMPLEX(s,s)^2) !--(1)
・LET sx = s^2-(y/(2*s))^2 !--(2)
を横線(x=a)変換用に書き直せばいいわけですね。

式(2)でyを変化させたときsxのとりうる最大値はs^2なので
・LET sx = s^2 !Im(COMPLEX(s,s)^2)

式(2)で、実際にはfor x=-sx to sxという使い方だったことから
・ +sx = s^2-(y/(2*s))^2 !--(2)
・ +sx = s^2-(y/(2*s))^2 !--(2')
の二つの式を考え、それぞれをy=f(sx)の式になおし
y -> sy、sx -> xと書き直す。そしてその小さいほうの値をとる。
・LET sy1 = (2*s)*sqr(s^2-x)
 LET sy2 = (2*s)*sqr(s^2+x)
 LET sy=min(sy1,sy2)
です。

私も複素変換に詳しいわけではないので、もしかしたらもっとスマートな説明ができるのかもしれませんが、
とりあえずの対処療法的でいいかげんな説明をする次第です。
お役にたてたら幸いです。

   ├訂正 青木太一 2004/11/29 08:51:25  ツリーへ

Re: このような場合の対処は、前回と同様でfor文... 返事を書く
青木太一 2004/11/29 08:51:25
訂正

>(ここで、「今回は横線だからラグビーボールも横置きだろう」と考えたのがゆみさんのミスだと思われます)

>を横線(x=a)変換用に書き直せばいいわけですね。

「横線」じゃなくて「縦線」でした

   └訂正2 青木太一 2004/12/02 08:28:47  ツリーへ

Re: このような場合の対処は、前回と同様でfor文... 返事を書く
青木太一 2004/12/02 08:28:47
訂正2

>式(2)で、実際にはfor x=-sx to sxという使い方だったことから
>・ +sx = s^2-(y/(2*s))^2 !--(2)
>・ +sx = s^2-(y/(2*s))^2 !--(2')

式(2)で、実際にはfor x=-sx to sxという使い方だったことから
・ +sx = s^2-(y/(2*s))^2 !--(2)
・ -sx = s^2-(y/(2*s))^2 !--(2')
でした


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