Jump to content

[VB6] VB e Matematica


NuGuN

Recommended Posts

Bem...sou novo por aqui e este é o meu primeiro post forum, para começar queria congratular todos os intervenientes neste projecto (P@P), ja li a revista e esta mt interessante, é pena haver poucos projectos deste tipo em Portugal mas pronto... o português é um bixinho que n gosta muito de se mexer ?.

Vamos ao que intereça 😛

Á uns dias fiz uns pequenos programas para o meu projecto de final de curso, e axei interessante deixar aqui o código fonte para o pll analizar e tirar ideias...comentar...etc.

O objectivo do primeiro programa é apenas detectar se o utilizador clickou em cima de uma recta. Para istu basta utilizar a equação reduzida da recta ou seja  "Y = M.X+B"

Option Explicit

Dim M       As Double
Dim B       As Double
Dim Final   As Double
Dim teste   As Double
Dim X1      As Integer
Dim X2      As Integer
Dim Y1      As Integer
Dim Y2      As Integer



Private Sub Form_Load()
pctTeste.DrawWidth = 3

X1 = 1000
X2 = 2000
Y1 = 2500
Y2 = 500

pctTeste.Line (X1, Y1)-(X2, Y2)
End Sub

Private Sub pctTeste_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Final < Y + 50 And Final > Y - 50 Then ' Dá um desconto quanto á localização do Cursor
    pctTeste.Cls
    
    pctTeste.DrawWidth = 3
    pctTeste.ForeColor = &H0
    pctTeste.Line (X1, Y1)-(X2, Y2)
    
    
    pctTeste.DrawWidth = 7
    pctTeste.ForeColor = &HFF
    pctTeste.PSet (X, Y)
End If
End Sub

Private Sub pctTeste_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Label1.Caption = Y

M = (Y2 - Y1) / (X2 - X1)
B = Y1 - (M * X1)

Final = M * X + B

Label2.Caption = "Y: " & Final


End Sub

http://clientes.netvisao.pt/nb012788/Intercepcao_Linha.rar

O outro programa consiste no calculo do ângulo en te dois segmentos de recta

Option Explicit

Dim Vu_x            As Double
Dim Vu_y            As Double
Dim Vv_x            As Double
Dim Vv_y            As Double

Dim Prod_Escalar_X  As Double
Dim Prod_Escalar_Y  As Double
Dim Prod_Escalar    As Double

Dim Norm_Vu         As Double
Dim Norm_Vv         As Double
Dim Alpha           As Double


Dim X1 As Double
Dim Y1 As Double
Dim X2 As Double
Dim Y2 As Double
Dim X3 As Double
Dim Y3 As Double
Dim X4 As Double
Dim Y4 As Double


Dim M       As Double
Dim B       As Double
Dim Final   As Double









Private Sub Form_Load()
X1 = (Picture1.Width / 2)
Y1 = (Picture1.Height / 2)

X3 = (Picture1.Width / 2)
Y3 = (Picture1.Height / 2)
X4 = 5500
Y4 = 3500
End Sub


Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Picture1.Cls

Picture1.Line (X1, Y1)-(X, Y)

Picture1.Line (X3, Y3)-(X4, Y4)
Call Calcula(X, Y)

End Sub


Public Sub Calcula(PB_x As Single, PB_y As Single)
Dim mm As Double


Vu_x = PB_x - X1 '|
                 '| Calculo do vector u
Vu_y = PB_y - Y1 '|

Vv_x = X4 - X3 '|
               '| Calculo do vector v
Vv_y = Y4 - Y3 '|

'#####################

Prod_Escalar_X = Vu_x * Vv_x                    '|
Prod_Escalar_Y = Vu_y * Vv_y                    '| Calculo do Produto escalar
Prod_Escalar = Prod_Escalar_X + Prod_Escalar_Y  '|

'#####################

Norm_Vu = Sqr((Vu_x) ^ 2 + (Vu_y) ^ 2) '|
                                       '| Calculo da Norma dos Vectores "u" e "v"
Norm_Vv = Sqr((Vv_x) ^ 2 + (Vv_y) ^ 2) '|

'#####################


Alpha = Prod_Escalar / (Norm_Vu * Norm_Vv) '|
                                           '| Calcula o Ângulo
Alpha = ArcCos(Alpha)                      '|

Label1.Caption = Alpha



' O código seguinte serve para incrementar valores ao angulo calculado acima
'caso o angulo seja maior que 180º, pois o código cima só calcula o ângulo ate 180º,
'quando chega aos 180º começa a diminuir outra vez o ângulo
'#################################################################
M = (Y4 - Y3) / (X4 - X3)

B = Y3 - (M * X3)



Final = M * PB_x + B


If Final <= PB_y Then
    mm = (360 - Alpha)
    Label1.Caption = mm
End If
'##################################################################

End Sub


'Função para passar de Radianos para Graus, pois o VB trabalha em Radianos
Public Function ArcCos(Val As Double) As Double
Dim PI      As Double
Dim Angulo  As Double


PI = 3.14159265358979

Angulo = (Atn(-Val / Sqr(-Val * Val + 1)) + (2 * Atn(1)))

Angulo = Angulo * (180 / PI)

ArcCos = Angulo
End Function

http://clientes.netvisao.pt/nb012788/Calcula_Angulo.rar

Se houver algum erro nas explicação das formulas digam,é que  foi o meu prof de matematica que me ajudou com as formulas e posso estar a dizer alguma coisa errada 😞

Espero os vosso comentários 😁

cumps

Link to comment
Share on other sites

  • 2 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.