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

NuGuN

[VB6] VB e Matematica

4 mensagens neste tópico

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 :P

Á 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 :biggrin:

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
:(...NuGuN o primeiro programa também dá para linhas verticais...?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois esquicime desse promenor, com linhas verticais não dá, fui capas de solucionar esse problema  :-[

Se alguem tem a solução para esse problema agradecia que explica-se :P

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas aplicações...

Fiquei sem perceber concretamente qual era a base que utilizavam, ou seja, onde estão as rectas que o programa vai ler???

Só daqui a umas duas semanas é que vou conseguir experimentar. Depois comentarei...

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