新しく発言する EXIT インデックスへ
質問なんですが。

  質問なんですが。 ゆみ 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
 ありがとうございました。
 卒業論文で、この図形について書くので、うまくできず困っていました。
 今から、やってみます。
 本当に、ありがとうございました。


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