NuGuN Posted May 31, 2006 at 05:47 PM Report Share #30362 Posted May 31, 2006 at 05:47 PM 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 More sharing options...
freesumo Posted June 1, 2006 at 02:14 AM Report Share #30513 Posted June 1, 2006 at 02:14 AM 😞...NuGuN o primeiro programa também dá para linhas verticais...? Link to comment Share on other sites More sharing options...
NuGuN Posted June 1, 2006 at 06:10 AM Author Report Share #30524 Posted June 1, 2006 at 06:10 AM 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 😛 cumps Link to comment Share on other sites More sharing options...
jtiagodias Posted October 12, 2008 at 03:45 PM Report Share #217454 Posted October 12, 2008 at 03:45 PM 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... Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now