• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

turkis

desenhar no vb.net :S (RESOLVIDO) ;)

3 mensagens neste tópico

boas...

estou a fazer um programita apenas para curiosidade com base neste tópico que está no sub matemática:

http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=186246

os cálculos estão correctos, mas agora o problema é outro .

quero desenhar linhas e o respectivo círculo, mas parece ser mais complicado do que as contas que tive que fazer... dá-me sempre erro, diz que o valor da variável é nula...não percebo :confused: ...

feito em vb 2008

aqui está o link:

Download-Link #1: http://rapidshare.com/files/118566687/circulo.rar.html

e aqui está o código:

Imports System.Math
Public Class Form1
   Dim g As Graphics
   Dim Centro_x As Integer
   Dim Centro_y As Integer
   Dim Raio As Integer
   Dim Ponto1_x As Integer
   Dim Ponto1_y As Integer
   Dim Ponto2_x As Integer
   Dim Ponto2_y As Integer
   Dim Ponto3_x As Integer
   Dim Ponto3_y As Integer
   Dim Inserir_pontos As Byte
   Dim Padpos_x As Integer
   Dim Padpos_y As Integer
   'Friend WithEvents btnPaint As System.Windows.Forms.Button


   Private Sub Calcular()
       Dim M_a, M_b, M_d, M_e As Single
       Dim B_d, B_e
       Dim Ponto4_x As Integer
       Dim Ponto4_y As Integer
       Dim Ponto5_x As Integer
       Dim Ponto5_y As Integer

       M_a = Int((Ponto2_y - Ponto1_y) / (Ponto2_x - Ponto1_x))
       M_b = (Ponto3_y - Ponto1_y) / (Ponto3_x - Ponto1_x)

       M_d = Int(-1 / M_a)
       M_e = Int(-1 / M_b)

       Ponto4_x = Int(Ponto1_x + ((Ponto2_x - Ponto1_x) / 2))
       Ponto4_y = Int(Ponto1_y + ((Ponto2_y - Ponto1_y) / 2))

       Ponto5_x = Int(Ponto1_x + ((Ponto3_x - Ponto1_x) / 2))
       Ponto5_y = Int(Ponto1_y + ((Ponto3_y - Ponto1_y) / 2))

       B_d = Int(Ponto4_y - M_d * Ponto4_x)
       B_e = Ponto5_y - M_e * Ponto5_x

       Centro_x = Int((B_e - B_d) / (M_d - M_e))
       Centro_y = Int(M_d * Centro_x + B_d)

       Raio = Int(Sqrt((Centro_x - Ponto3_x) ^ 2 + (Centro_y - Ponto3_y) ^ 2))

   End Sub

   Private Sub Desenhar() Handles btnPaint.Click
       g.DrawLine(Pens.Red, Ponto1_x - 10, Ponto1_y - 10, Ponto1_x + 10, Ponto1_y + 10)
       g.DrawLine(Pens.Red, Ponto2_x - 10, Ponto2_y - 10, Ponto2_x + 10, Ponto2_y + 10)
       g.DrawLine(Pens.Red, Ponto3_x - 10, Ponto3_y - 10, Ponto3_x + 10, Ponto3_y + 10)
       g.DrawEllipse(Pens.Blue, Centro_x - Raio, Centro_y - Raio, Raio, Raio)
   End Sub


   Private Sub MouseClickEvent(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
       Padpos_x = e.Location.X
       Padpos_y = e.Location.Y
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Inserir_pontos = 0
   End Sub

   Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick

       Select Case Inserir_pontos
           Case 0
               Ponto1_x = Padpos_x
               Ponto1_y = Padpos_y
               Inserir_pontos += 1
               TextBox_ponto1.Text = Int(Ponto1_x).ToString & "," & Int(Ponto1_y).ToString
               Desenhar()

           Case 1
               Ponto2_x = Padpos_x
               Ponto2_y = Padpos_y
               Inserir_pontos += 1
               TextBox_ponto2.Text = Int(Ponto2_x).ToString & "," & Int(Ponto2_y).ToString
               Desenhar()
           Case Else
               Ponto3_x = Padpos_x
               Ponto3_y = Padpos_y
               TextBox_ponto3.Text = Int(Ponto3_x).ToString & "," & Int(Ponto3_y).ToString
               Calcular()
               TextBox_centro.Text = Int(Centro_x).ToString & "," & Int(Centro_y).ToString
               TextBox_Raio.Text = Int(Raio).ToString
               Desenhar()
       End Select

   End Sub
End Class

desde já agradeço a vossa atenção...

ps

claro que isto ainda está em fase de estudo, não liguem à desorganização e à redundância ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ninguém sabe?? :down:

isto depois é para aplicar num programa que estou a fazer para planificar sólidos....dáva-me jeito  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já está....desenrasquei-me na net ;)

era só declarar esta variável:

Dim g As Graphics = Me.CreateGraphics()

assim posso usar quando quizer fazer um novo.

link: http://rapidshare.com/files/120042156/circulo_valter.rar.html

Imports System.Math
Public Class Form1

    Dim Centro_x As Integer
    Dim Centro_y As Integer
    Dim Raio As Integer
    Dim Ponto1_x As Integer
    Dim Ponto1_y As Integer
    Dim Ponto2_x As Integer
    Dim Ponto2_y As Integer
    Dim Ponto3_x As Integer
    Dim Ponto3_y As Integer
    Dim Inserir_pontos As Byte
    Dim Padpos_x As Integer
    Dim Padpos_y As Integer

    Private Sub Calcular()
        Dim M_a, M_b, M_d, M_e As Single
        Dim B_d, B_e As Single
        Dim Ponto4_x As Single
        Dim Ponto4_y As Single
        Dim Ponto5_x As Single
        Dim Ponto5_y As Single

        M_a = (Ponto2_y - Ponto1_y) / (Ponto2_x - Ponto1_x)
        M_b = (Ponto3_y - Ponto1_y) / (Ponto3_x - Ponto1_x)

        M_d = -1 / M_a
        M_e = -1 / M_b

        Ponto4_x = Ponto1_x + ((Ponto2_x - Ponto1_x) / 2)
        Ponto4_y = Ponto1_y + ((Ponto2_y - Ponto1_y) / 2)

        Ponto5_x = Ponto1_x + ((Ponto3_x - Ponto1_x) / 2)
        Ponto5_y = Ponto1_y + ((Ponto3_y - Ponto1_y) / 2)

        B_d = Ponto4_y - M_d * Ponto4_x
        B_e = Ponto5_y - M_e * Ponto5_x

        Centro_x = Int((B_e - B_d) / (M_d - M_e))
        Centro_y = Int(M_d * Centro_x + B_d)

        Raio = Int(Sqrt((Centro_x - Ponto3_x) ^ 2 + (Centro_y - Ponto3_y) ^ 2))

    End Sub

    Private Sub Desenhar()

        Dim g As Graphics = Me.CreateGraphics()
        Select Case Inserir_pontos
            Case 0
                g.DrawLine(Pens.Red, Ponto1_x - 10, Ponto1_y, Ponto1_x + 10, Ponto1_y)
                g.DrawLine(Pens.Red, Ponto1_x, Ponto1_y - 10, Ponto1_x, Ponto1_y + 10)
            Case 1
                g.DrawLine(Pens.Red, Ponto2_x - 10, Ponto2_y, Ponto2_x + 10, Ponto2_y)
                g.DrawLine(Pens.Red, Ponto2_x, Ponto2_y - 10, Ponto2_x, Ponto2_y + 10)
            Case 2
                g.Clear(Color.White)
                g.DrawLine(Pens.Red, Ponto2_x - 10, Ponto2_y, Ponto2_x + 10, Ponto2_y)
                g.DrawLine(Pens.Red, Ponto2_x, Ponto2_y - 10, Ponto2_x, Ponto2_y + 10)
                g.DrawLine(Pens.Red, Ponto1_x - 10, Ponto1_y, Ponto1_x + 10, Ponto1_y)
                g.DrawLine(Pens.Red, Ponto1_x, Ponto1_y - 10, Ponto1_x, Ponto1_y + 10)
                g.DrawLine(Pens.Red, Ponto3_x - 10, Ponto3_y, Ponto3_x + 10, Ponto3_y)
                g.DrawLine(Pens.Red, Ponto3_x, Ponto3_y - 10, Ponto3_x, Ponto3_y + 10)
                g.DrawEllipse(Pens.Blue, Centro_x - Raio, Centro_y - Raio, Raio * 2, Raio * 2)
        End Select
    End Sub


    Private Sub MouseClickEvent(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        Padpos_x = e.Location.X
        Padpos_y = e.Location.Y
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Inserir_pontos = 0
    End Sub

    Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick

        Select Case Inserir_pontos
            Case 0
                Ponto1_x = Padpos_x
                Ponto1_y = Padpos_y
                TextBox_ponto1.Text = Int(Ponto1_x).ToString & "," & Int(Ponto1_y).ToString
                Desenhar()
                Inserir_pontos += 1
            Case 1
                Ponto2_x = Padpos_x
                Ponto2_y = Padpos_y
                TextBox_ponto2.Text = Int(Ponto2_x).ToString & "," & Int(Ponto2_y).ToString
                Desenhar()
                Inserir_pontos += 1
            Case Else
                Ponto3_x = Padpos_x
                Ponto3_y = Padpos_y
                TextBox_ponto3.Text = Int(Ponto3_x).ToString & "," & Int(Ponto3_y).ToString
                Calcular()
                TextBox_centro.Text = Int(Centro_x).ToString & "," & Int(Centro_y).ToString
                TextBox_Raio.Text = Int(Raio).ToString
                Desenhar()
        End Select

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        TextBox_ponto1.Text = String.Empty
        TextBox_centro.Text = String.Empty
    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora