質問なんですが。 ゆみ 2004/11/24 22:58:30 └どういうコードを書いたのかわからないとア... 青木太一 2004/11/25 07:38:02 └!zが直線y=a,x=b上を動くとき ゆみ 2004/11/25 20:01:21 └OPTIONARITHMETICCOMPLEX 青木太一 2004/11/26 07:40:35 └ゆみさんがコードを見せてくれたので何が問... 青木太一 2004/11/26 08:01:09 └ありがとうございました。 ゆみ 2004/11/26 18:42:58
質問なんですが。 ゆみ 2004/11/24 22:58:30 ツリーへ
質問なんですが。 |
返事を書く |
ゆみ 2004/11/24 22:58:30 | |
初心者です。 かなり、レベルの低い話なんですが、どなたか教えて下さい。 x,y平面上のx軸、y軸に平行な直線を、f(z)=sqr(z)で、変換すると、双曲線が現れます。 しかし、範囲いっぱいに、双曲線を描くことができません。 例えば、描く範囲が‐3、‐3、‐3、‐3だとしたら、双曲線は、 -2、-2、-2、-2の範囲までしかあらわれないんです。 表現が乏しくてすいません。 アドバイスお願いします。 |
└どういうコードを書いたのかわからないとア... 青木太一 2004/11/25 07:38:02 ツリーへ
Re: 質問なんですが。 |
返事を書く |
青木太一 2004/11/25 07:38:02 | |
どういうコードを書いたのかわからないとアドバイスできないので、 可能ならコードを張り付けて見せてください |
└!zが直線y=a,x=b上を動くとき ゆみ 2004/11/25 20:01:21 ツリーへ
Re: どういうコードを書いたのかわからないとア... |
返事を書く |
ゆみ 2004/11/25 20:01:21 | |
! zが直線y=a,x=b上を動くとき ! w=sqr(z) の軌跡を描く OPTION ARITHMETIC COMPLEX ! INPUT a LET s=3 SET WINDOW -s,s,-s,s DRAW grid SET POINT STYLE 1 FOR a = -3 TO 3 STEP 0.5 FOR x=-s TO s STEP s/10000 LET y=a SET POINT COLOR 3 PLOT POINTS: x,y LET p=-5 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 a SET POINT STYLE 1 FOR b= -3 TO 3 STEP 0.5 FOR y=-s TO s STEP s/10000 LET x=b SET POINT COLOR 3 PLOT POINTS: x,y LET p=-5 IF y<>0 THEN LET z=COMPLEX(x,y) LET w=SQR(z) SET POINT COLOR 4 PLOT POINTS: Re(w),Im(w) PLOT POINTS: Re(-w),Im(-w) END IF NEXT y NEXT b END 表示する画面を‐3,3,-3,3としているのに、あらわれる双曲線は、 -2,2,-2,2の範囲なんです。どうしたら、いいんですか?? お忙しいと思いますが、青木さん、アドバイスお願いします。 |
└OPTIONARITHMETICCOMPLEX 青木太一 2004/11/26 07:40:35 ツリーへ
Re: !zが直線y=a,x=b上を動くとき |
返事を書く |
青木太一 2004/11/26 07:40:35 | |
OPTION ARITHMETIC COMPLEX set bitmap size 600,600 SET POINT STYLE 1 LET s=3 SET WINDOW -s,s,-s,s plot text ,at -s,-s:"グラフィックスウィンドウをクリックして進めてください" get point :gx,gy clear LET win=s SET WINDOW -win,win,-win,win plot text ,at -win,-win:"ゆみさんのコードはこのようなものでした。" DRAW grid FOR y = -s TO s STEP .5 !y=a FOR x=-s TO s 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 get point :gx,gy clear LET win=s*10/3 SET WINDOW -win,win,-win,win plot text ,at -win,-win:"画面の座標を広げてみました" DRAW grid FOR y = -s TO s STEP .5 !y=a FOR x=-s TO s 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 get point :gx,gy clear plot text ,at -win,-win:"xのfor文の範囲をひろげて、足りない線の長さを伸ばします" DRAW grid LET sx = Re(COMPLEX(s,0)^2) FOR y = -s TO s STEP .5 !y=a 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 get point :gx,gy clear plot text ,at -win,-win:"y=aのfor文の範囲をひろげて、斜め方向に不足している線を増やします" DRAW grid LET sy = Im(COMPLEX(s,s)^2) LET sx = Re(COMPLEX(s,0)^2) FOR y = -sy TO sy STEP .5 !y=a 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 get point :gx,gy clear plot text ,at -win,-win:"xのfor文の範囲を調整して、線がはみ出さないようにしてみました" DRAW grid LET sy = Im(COMPLEX(s,s)^2) FOR y = -sy TO sy STEP .5 !y=a 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 |
└ゆみさんがコードを見せてくれたので何が問... 青木太一 2004/11/26 08:01:09 ツリーへ
Re: OPTIONARITHMETICCOMPLEX |
返事を書く |
青木太一 2004/11/26 08:01:09 | |
ゆみさんがコードを見せてくれたので何が問題なのかわかりました。 これは、プログラムというより数学の問題ですね。 w=sqr(z)という複素変換はもとのzをグニャグニャっと曲げて「小さく」する変換です。 よって、変換結果を-3,3,-3,3の範囲で描きたい場合は、もとのzを作るためのxやy=aのfor文の範囲は-3,3,-3,3より大きくないといけません。 具体的にどれだけ大きくするかですが、てきとうにfor文の範囲の値を大きくしてもいいでしょうし、 厳密に複素変換の数式を利用してもよいでしょう。 先に投稿した私のプログラムは、その一連の手順を示す紙芝居となっています。 (基本的にfor文の範囲を制御するところしか変更していません。) ゆみさんが欲しいプログラムは紙芝居の最後のページを元にした !--------------ここから OPTION ARITHMETIC COMPLEX SET POINT STYLE 1 s=3 LET win=s SET WINDOW -win,win,-win,win DRAW grid LET sy = Im(COMPLEX(s,s)^2) FOR y = -sy TO sy STEP .5 !y=a 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 !--------------ここまで ということになると思います。 なお、以上の話は簡単とコード量節約のために水平線(y=a)だけ扱いました。 垂直線(x=b)も同様な考え方で処理できると思います。 また、プログラム中の変数名はオリジナルのゆみさんのものとは若干異なります。 では、お役に立てたら幸いです。 |
└ありがとうございました。 ゆみ 2004/11/26 18:42:58 ツリーへ
Re: ゆみさんがコードを見せてくれたので何が問... |
返事を書く |
ゆみ 2004/11/26 18:42:58 | |
ありがとうございました。 卒業論文で、この図形について書くので、うまくできず困っていました。 今から、やってみます。 本当に、ありがとうございました。 |