elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Intersectar 2 lineas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Intersectar 2 lineas  (Leído 1,271 veces)
NYlOn


Desconectado Desconectado

Mensajes: 842


OOOOHHHHHH, TARAGÜIIII xDDDDDD


Ver Perfil WWW
Intersectar 2 lineas
« en: 11 Agosto 2006, 21:53 pm »

Hola a todos, en realidad mi problema es mas de matematicas que de programacion, pero me parecio mas apropiado postearlo aca. Mi problema es el siguiente:
Tengo 2 lineas secantes (es decir, que se cortan en un punto pero no a 90°). Estas lineas estan representadas con controles Line. Los datos que yo tengo son (X1; Y1) y (X2; Y2), lo que significa que sé donde empieza y donde termina cada linea. Lo que necesito hacer (y es lo que no puedo conseguir), es situar un control PictureBox en la interseccion de esas 2 lineas.
Por favor si a alguien se le ocurre alguna solucion estaria muy agradecido.

Saludos.-


En línea

NYlOn


Desconectado Desconectado

Mensajes: 842


OOOOHHHHHH, TARAGÜIIII xDDDDDD


Ver Perfil WWW
Re: Intersectar 2 lineas
« Respuesta #1 en: 12 Agosto 2006, 09:57 am »

Problema solucionado  ;D


Estuve toda la tarde, pero salio y anda a la perfeccion =)

Dejo el codigo por si a alguien le interesa. No lo comento pq ya estoy cansado xD. Basicamente lo que hice fue sacar la pendiente de cada recta y con las pendientes sacar la ecuacion de cada una. Despues las iguale y resolvi la ecuacion. Fue facil hacerlo a mano pero en VB, puf, me costo bastante (mas que nada por la utilizacion de decimales y cadenas del tipo String). Aclaro que hay mucho codigo que puede sacarse y reducirlo (ademas de cambiar los nombres ya que fui modificando funciones, etc). En fin, espero que a alguien le sirva y no tenga que hacer todo el trabajo desde 0...
Código:
Option Explicit
Public vX As Currency, vY As Currency

Public Sub SacarEcuacion(Line1 As Line, Line2 As Line)
    Dim Ecs(1) As String, i As Integer
    Dim Pendiente As Currency, Nominador As Currency, Denominador As Currency
    Dim X1 As Currency, Y1 As Currency, X2 As Currency, Y2 As Currency
   
    For i = 0 To 1
        If i = 0 Then
            X1 = Line1.X1: X2 = Line1.X2: Y1 = Line1.Y1: Y2 = Line1.Y2
        Else
            X1 = Line2.X1: X2 = Line2.X2: Y1 = Line2.Y1: Y2 = Line2.Y2
        End If
        Nominador = Y2 - Y1
        Denominador = X2 - X1
        Pendiente = Nominador / Denominador
        Ecs(i) = Pendiente & ".X +" & (Pendiente * -X2) + Y2
    Next i
   
    Interseccion Ecs(0), Ecs(1)
   
End Sub

Public Sub Interseccion(Ec1 As String, Ec2 As String)
    Dim P(1) As String, Q(1) As String, J(4) As Currency
    Dim Punto As Integer
   
    P(0) = Mid(Ec1, 1, InStr(1, Ec1, ".") - 1)
    Punto = InStr(1, P(0), "/")
    If Punto > 0 Then
        If Left(P(0), 1) = "-" Then Punto = Punto + 1
        J(0) = Val(Mid(P(0), 1, Punto)) / Val(Mid(P(0), Punto))
    Else
        J(0) = P(0)
    End If
   
    P(1) = Mid(Ec2, 1, InStr(1, Ec2, ".") - 1)
    Punto = InStr(1, P(0), "/")
    If Punto > 0 Then
        If Left(P(1), 1) = "-" Then Punto = Punto + 1
        J(1) = -Val(Mid(P(1), 1, Punto)) / Val(Mid(P(1), Punto))
    Else
        J(1) = -P(1)
    End If
   
    Q(0) = Mid(Ec1, InStr(1, Ec1, "+") + 1)
    Punto = InStr(1, Q(0), "/")
    If Punto > 0 Then
        If Left(P(0), 1) = "-" Then Punto = Punto + 1
        J(2) = -Val(Mid(Q(0), 1, Punto)) / Val(Mid(Q(0), Punto))
    Else
        J(2) = -Q(0)
    End If
   
    Q(1) = Mid(Ec2, InStr(1, Ec2, "+") + 1)
    Punto = InStr(1, Q(1), "/")
    If Punto > 0 Then
        If Left(P(0), 1) = "-" Then Punto = Punto + 1
        J(3) = Val(Mid(Q(1), 1, Punto)) / Val(Mid(Q(1), Punto))
    Else
        J(3) = Q(1)
    End If
   
    vX = (J(2) + J(3)) / (J(0) + J(1))
    vY = Cuenta(Ec1, vX)
End Sub

Public Function Cuenta(Ecuacion As String, X As Currency) As Currency
    Dim P(1) As Currency, Punto As Integer
   
    Punto = InStr(1, Ecuacion, ".")
    P(0) = Fraccion(Mid(Ecuacion, 1, Punto - 1)) * Fraccion(X)
   
    P(1) = P(0) + Val(Fraccion(Mid(Ecuacion, Punto + 4)))
   
    Cuenta = P(1)
End Function

Public Function Fraccion(n As Currency) As String
    Dim Punto As Integer
    Punto = InStr(1, n, "/")
    If Punto > 0 Then
        Fraccion = Val(Mid(n, 1, Punto - 1)) / Val(Mid(n, Punto + 1))
    Else
        Fraccion = n
    End If
End Function


Para ver la interseccion seria:
Código:
   SacarEcuacion Line1, Line2
   Picture1.Move vX, vY 'aca ponemos un picturebox en la interseccion

Saludos.-


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Que son las lineas de comandos en los AVS?
Análisis y Diseño de Malware
str0nghack 6 4,927 Último mensaje 9 Julio 2015, 13:13 pm
por str0nghack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines