Autor
|
Tema: Intersectar 2 lineas (Leído 1,271 veces)
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
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
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
Problema solucionado 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... 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: SacarEcuacion Line1, Line2 Picture1.Move vX, vY 'aca ponemos un picturebox en la interseccion
Saludos.-
|
|
|
En línea
|
|
|
|
|
|