none
追加座標による直線の引き方を教えてください RRS feed

  • 質問

  • vb6だと

    line(10,10)-(20,20)

    line -(30,30)

    とすると、追加座標(30,30)により、(20,20)から(30,30)に直線を引くことができますよね。

    ではvb2010で単独の

    line -(30,30) は

    どのように記述すればいいのでしょうか?

    皆さんのお知恵を拝借したいと思います。どうかよろしくおねがいします。

    2011年10月19日 18:40

回答

  • VB2010 専用とか、VB6 とか関係なく、プログラミングとしてどのようにすれば実現できるかという領域に見えます。

    VB6 の Line ステートメントのその表記は前回の座標から線を引くということですよね。
    そうであれば、前回の座標を変数に入れておけば、解決するのでは?そのために、乱数の結果を現在の座標として変数に入れて、ラインを引いた後に、前回の座標変数に現在の座標を入れて次のループになればよいはずです。

    このように、VB2010 独自の問題ではなく、工夫の問題です。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年10月19日 22:19
    モデレータ

すべての返信

  • 追記になりますが、私がvb6で記述していたコードは以下のようなものでした。 これをvb2010専用に翻訳しなおすとどのようになるのでしょうか?

    お教えください。もちろんvb2010において

    Dim mypen As New Pen(Color.FromArgb(255,0,0,0))や

    Dim g As Graphics=Me.CreateGraphics()

    g.DrawLine(mypen,x1,y1,x2,y2)などが必要なのは分かります。

          

    vb6で組んでいたころのコード

    pset(0,200)

    For newX=10 To 1000 step 10

        line -(newX,Rnd*300)

    Next newX

     

    2011年10月19日 19:57
  • VB2010 専用とか、VB6 とか関係なく、プログラミングとしてどのようにすれば実現できるかという領域に見えます。

    VB6 の Line ステートメントのその表記は前回の座標から線を引くということですよね。
    そうであれば、前回の座標を変数に入れておけば、解決するのでは?そのために、乱数の結果を現在の座標として変数に入れて、ラインを引いた後に、前回の座標変数に現在の座標を入れて次のループになればよいはずです。

    このように、VB2010 独自の問題ではなく、工夫の問題です。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年10月19日 22:19
    モデレータ
  • さっそくのご教授、ありがとうございます。

    VB2010にはline -(newX,newY)に当たるものはなく、結局はプログラム次第ということですね。

    さっそく自分なりにコードを組んでみました。

     Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
            Dim g As Graphics = e.Graphics
            Dim mypen As New Pen(Brushes.Black)
            Dim mybrush As New SolidBrush(Color.Black)
            Dim oldX As Integer
            Dim oldY As Integer
            Dim newX As Integer
            Dim newY As Integer
    
            oldX = 0
            oldY = 110
            g.FillRectangle(mybrush, oldX, oldY, 1, 1)
            Dim recoldY As Integer
            recoldY = oldY
            For newX = 10 To 300 Step 10
                newY = Rnd() * 50 - 25 + recoldY
                g.DrawLine(mypen, oldX, oldY, newX, newY)
                oldX = newX : oldY = newY
            Next newX
        End Sub
    

     

    2011年10月19日 23:09