• ベストアンサー

消す軌跡と残す軌跡

For t = 0 To 6 Step 0.01 Picture1.Line (0, 0)-(Cos(t), Sin(t)) Picture1.Cls Picture1.PSet (Cos(t), Sin(t)) Next t アニメーションで Line文の描く軌跡は消したいのでClsを使ったのですが Pset文の描く軌跡は残したいのです。 その場合どうしたらいいのでしょうか? 上のプログラムですとline文の軌跡もPset文の軌跡も消えてしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

MSDNによると Public: 省略可能です。すべてのモジュールのすべてのプロシージャから参照できる Sub プロシージャを宣言するときに指定します。Option Private ステートメントが記述されているモジュールの中で使用した場合、その Sub プロシージャは、プロジェクトの外からは参照できません。 Private: 省略可能です。Sub プロシージャを記述したモジュール内の、ほかのプロシージャからのみ参照できるプロシージャを宣言するときに、指定します。 これ以外にもいろいろキーワードがあります。 どれがよくてどれが悪いということではなく、 プログラマーが自由に使い分けるわけです。

karasu4649
質問者

お礼

大変ためになりました。いろいろありがとうございました。

その他の回答 (2)

回答No.2

>これは関数なんでしょうか? そうです。 勝手に作った関数です。 サブルーチンと言った方がわかりやすいでしょうか。 パブリックとプライベートは まぁ、その意味合い通りです。

karasu4649
質問者

お礼

もしかしてこういうことでしょうか? 関数というのはどこからでも呼び出せるようにpublic(公)にしておいたほうが良い、ということでしょうか? 関数がprivate(私)だとやっぱり困るものなんでしょうか?

回答No.1

VB6でしょうか。 CLSでラインだけ消すということはできません。 1.バックカラーでラインを描いて消す。 2.1度CLSし、見せたい部分を再び描く。 3.ラインとPSETを別々のPictureに描きさらに別のPictureにコピー。 Private Sub Command1_Click() Dim T As Double For T = 0 To 6 Step 0.01 Call DrawP(T) DoEvents Next T End Sub Public Sub DrawP(T As Double) Dim i As Single Picture1.Cls Picture1.Line (0, 0)-(Cos(T), Sin(T)) For i = 0 To T Step 0.01 Picture1.PSet (Cos(i), Sin(i)) Next i End Sub Private Sub Form_Load() Picture1.ScaleLeft = -2 Picture1.ScaleWidth = 4 Picture1.ScaleTop = -2 Picture1.ScaleHeight = 4 End Sub

karasu4649
質問者

お礼

ありがとうございます。確かに出来ました。 しかし私にはプログラムがなんとなくしか読めず、otto0001ottoさんの教えてくれたやり方を参考にして Private Sub Command1_Click() Dim T As Double Dim i As Single For T = 0 To 6 Step 0.01 Picture1.Cls Picture1.Line (0, 0)-(Cos(T), Sin(T)) For i = 0 To T Step 0.01 Picture1.PSet (Cos(i), Sin(i)) Next i Next T End Sub としたら同じように出来ました。 Public Sub DrawP(T As Double)というのがよくわからないのですが これは関数なんでしょうか? あとpublicの意味がわからないのですが、publicをprivateに書き換えても ちゃんと動きました。

関連するQ&A

  • for文の実行速度を遅くしたいのですが

    For t = 0 To 6 Picture1.Line (0, 0)-(100 * Cos(t), 100 * Sin(t)) Next t こういうfor文だと、一瞬でtが6まで行ってしまうので アニメーションとして成り立ちません。 ゆっくりfor文を実行させたいのですが そういうのはあるのでしょうか?

  • 円の自転のさせ方

    For i = 0 To 6 Step 0.1 Picture1.Circle (10 * Cos(i), 10 * Sin(i)), 5 Next i 円を地球に見立てて自転もさせたいのですが これだとこの円は公転しかしません。 円を自転させるにはどうしたらいいのでしょうか?

  • N88basicからVBScriptへの移行

    普通のベーシックでPsetやCirlceやLineというのがありますが それをVBSで使いたいのですがどうしたらいいのでしょうか? 例えば 10 for t=0 to 100 step 0.1 20 x=t 30 y=t 40 pset(x,y) 50 next t これをVBSに書き換えるとどういう風に書き換えたら良いのでしょうか? VBSは表示させる画面がないのでグラフィックは出来ないのでしょうか?

  • BASICでの波形合成

    学校でのBASICの宿題で、複数のSIN波を合成する問題で 100 CLS 3:LINE(0,240)-(640,240),7 110 INPUT"基本波の周期は";C 120 INPUT"基本波の振幅は";W 130 INPUT"基本波の移送は";F 140 INPUT"第何倍音まで計算する";N:DIM A(N),B(N) 150 FOR I=1 TO N 160 PRINT I;:INPUT "番目の倍音の振幅は";A(I) 170 PRINT I;:INPUT "番目の倍音の移送は";B(I) 180 NEXT I 190 FOR K=0 TO 360/C*2*3.14159# STEP 3.14159#/90 200 X=C*K-F:Y=-(W*SIN(K))+240:LINE-(X,Y),4 210 NEXT K 220 FOR G=1 TO N:PSET(0,240),3 230 FOR H=0 TO 360/C*2*3.14159# STEP 3.14159#/90 240 X=C/(G+1)*H-B(G):Y=-((A(G))*SIN(H))+240:LINE-(X,Y),3 250 NEXT H,G ここで描いたSIN波を合成した波を描く方法が分からない状態です。 どうにも解決できないのでここに質問しました。どなたか分かる方がいたら教えてください。

  • basicでの三角関数のグラフの書き方??

    active basicを使って、sinxのグラフを書こうとしたのですが、出来ません。以下のようにやってみたのですが、x軸と平行な点線が描かれるだけ…。 100 cls3 110 line(50,550)-(1050,550) 120 line(550,50)-(550,1050) 130 for i=0 to 360 140 x=i/360:y=sinx 150 xw=500*x+550:yw=500*y+550 160 pset (xw,yw) 170 line -(xw,yw) 180 next i 990 end どこを直せばいいのか分かりません。初心者なので…。 どなたか分かる方がいらっしゃったら、教えてください。 宜しくお願いします。

  • グラフィックの表示について VB6

    VB6について PictureBoxにLine文で格子を描きましたが、 For X = 1 To X軸 \ 枠 T = 枠 * X * 是正! Picture1.Line (0, Y軸 + T)-(横, Y軸 + T), 線色 Picture1.Line (0, Y軸 - T)-(横, Y軸 - T), 線色 Next X For X = 1 To Y軸 \ 枠 T = 枠 * X Picture1.Line (X軸 + T, 0)-(X軸 + T, 縦), 線色 Picture1.Line (X軸 - T, 0)-(X軸 - T, 縦), 線色 Next X ソースはこんなかんじです。 永遠の初心者(向上心はあるのですが、)で、格子をえがくのははじめてなので、 実行してみて、縦の格子の1マスの幅と横の格子の幅がちがい、正方形になるはずが 長方形になってしまいました。 なぜでしょうか、DPIとかなにか関連があるのでしょうか。それぞれのパソコンで異なった結果が出るのでしょうか。どなたか対処法をご教授ください。検索などかけてはいるのですが、ヒントになるような事柄でも結構です。お願いします。 VB6SP6 OS XP 画面サイズ 1024×768です。

  • 十進BASICでのsin(x)の近似のグラフ化について

    十進BASICを使っています。 sin(x)=x-x^3/3!+x^5/5!-... について、グラフで確かめようと思いプログラミングしてみたんですが、3行目でt=36以上にするとグラフが描かれなくなってしまいます。 どこを直せばt>35でもグラフが描かれるようになるのか教えていただけないでしょうか。よろしくおねがいします。 LET w=30 LET s=0.1 LET t=30 DIM p1(t) DIM p2(t) SET WINDOW -w,w,-w,w SET POINT STYLE 1 DRAW AXES0 FOR n= 1 TO t LET p1(n)=(-1)^(n+1) LET p2(n)=2*n-1 NEXT n SET LINE COLOR 15 FOR x= -w TO w STEP s LET y=SIN(x) PLOT LINES: x,y; NEXT x PLOT LINES SET LINE COLOR 1 FOR x= -w TO w STEP s WHEN EXCEPTION IN LET y=0 FOR n= 1 TO t LET y=y+p1(n)*x^p2(n)/FACT(p2(n)) NEXT n PLOT LINES: x,y; USE PLOT LINES END WHEN NEXT x END

  • 軌跡の描き方

    滑らかな水平面上に直線Lがあり、直線L上にOをとる。点Oを原点とし、水平面内で点Oを軸にして一定の角速度ωで上からみて反時計回りに回転するx, y軸をとる。時刻t=0では直線Lとx軸が一致しているものとする。いま、時刻t=0に点Oから距離Rだけ離れたL上の点から小球を、水平面に立っている観測者からみて、点Oに向かって 速さvoで打ち出した。xy平面内では時刻t=0の小球の位置は(x,y)=(-R,0)である。なお必要ならば小さい角δ[rad]に対して成り立つ近似式 sinδ=δ, cosδ=1を用いよ。 小球を打ち出してから微小時間Δt後の小球のy座標は y=(R-voΔt)sin(ωΔt)となっているが、ωΔtが微小であることを用いて、y≒(R-voΔt)ωΔt と近似できる。これは小球を打ち出した直後には、y方向について、等速加速度運動と近所できることを表している。そのときには小球は大きさ2mvoωの慣性力をy軸の負の向きに受けていることになる。 問 0≦t≦R/voにおける小球のxy平面内での運動の軌跡を描け。軌跡には、小球の進む向きを表す矢印をつけよ。ただし、vo>Rωとする。 小球の位置(x,y)は時刻tの関数として、 x=-(R-vot)cos(ωt) y=(R-vot)sin(ωt) と表され、小球の運動の軌跡は、半径がR-votの円の一部となるので、以下の図のようになると思います。(以下の図は、半径がRの円の一部を描き、その円周を8等分して、それぞれの点から原点Oに引いた線を8等分し、R/8づつ原点に近づいていくように点をうって、その点を結んでいく、というような手順で描きました。) しかし、解答に載っていた図は、x=-R/2に関して左右対称でした。 厳密に描くとすれば、以下の図の方が正しいと思うのですが、大学入試ではどちらでもいいのでしょうか? (これは京大実戦模試の問題です。)

  • VBで円を書いたとき、同じにならないのですが。どうしてでしょう?

    VBで、円を描いたとき Circle (CX, CY), 450 で、描いた円と Pi = 3.14159265 For i = 1 To 120 dd = i * 3 x = Cos((90 - dd) * Pi / 180) y = -Sin((90 - dd) * Pi / 180) HX = CX + x * 450 HY = CY + y * 450 PSet (HX, HY) Next i で、描いた円が、重ならないのですが、何故でしょうか? Circle で、描いた円の方が縦が、少し短いような感じになります。

  • 図形の塗りつぶしについて

    図形の塗りつぶしについて 例えば、 For i = 0 To 30000 Step 50 Picture1.Circle (0 + i, 10), 10, vbWhite Next i (Picture1:黒) によって円が複数できますが、 その円を塗りつぶすには、 どのようにプログラムを作ればいいのですか? 教えてください。

専門家に質問してみよう