/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Calcular el punto de corte entre dos rectas

 
      Índice del Foro elrincondelc.com -> Gráficos
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
GrayFox



Registrado: 28 Ene 2007
Mensajes: 47

MensajePublicado: 20/07/2007 9:38 am
Título: Calcular el punto de corte entre dos rectas

Hola

Resulta que mas o menos se como hacer esto y tengo el codigo, pero no funciona correctamente y no puedo encontrar el bug (llevo dos semanas intentandolo).

Les dejo el codigo, si alguien encuentra el bug (o conoce una mejor forma de hacerlo) porfavor ayudeme.

En vez de utilizar la formula y=aX+b utilice la formula general Ax+By+C=0 porque la anterior se utiliza para funciones y esto excluye las rectas de 90º y 270º con respecto al eje x. La funcion para graficar las rectas funciona perfecto asi que no creo que el problema sea la clase Recta (= la pongo)

Código:


   class Recta
   {
   public:
      //Propiedades
      float m_fA;
      float m_fB;
      float m_fC;
      //Constructores
      Recta(float fPendiente, float fOrdOrigen){Set(fPendiente, fOrdOrigen);};
      Recta(float fPendiente, Coordenada c1){Set(fPendiente, c1);};
      Recta(Coordenada c1, Coordenada c2){Set(c1, c2);};
      Recta(Angulo Ang, float fOrdOrigen){Set(Ang, fOrdOrigen);};
      Recta(Angulo Ang, Coordenada c1){Set(Ang, c1);};
      Recta(Segmento l1){Set(l1);};
      //Asignar valores a la recta
      void Set(float fPendiente, float fOrdOrigen);
      void Set(float fPendiente, Coordenada c1);
      void Set(Coordenada c1, Coordenada c2);
      void Set(Angulo Ang, float fOrdOrigen);
      void Set(Angulo Ang, Coordenada c1);
      void Set(Segmento l1);
      //Propiedades derivadas
      float GetX(float fY);
      float GetY(float fX);
   };

   Coordenada Corte(Recta r1, Recta r2)
   {
      float fy = ((r2.m_fA*r1.m_fC-r1.m_fA*r2.m_fC)/(r2.m_fA*r1.m_fB-r1.m_fA*r2.m_fB));
      float fx;
      fx=r2.GetX(fy);
      return GetCoor(fx,fy);
   }


Todas las demas clases o funciones que aparecen en el codigo estoy 99,99% seguro que funcionan perfecto.

Lo que nesesito es que la funcion llegue con los valores adecuados en fx y fy para que GetCoor pueda devolver la coordenada en que se cortan las rectas.

Si alguien quiere el codigo completo mandeme un e-mail a

Please help me!!!!!!!
thanks

Salu2
GrayFox

Edito: Bue como no me respondieron supongo que mi codigo esta tan mal que no se puede ni leer, asi que cambio la pregunta: ¿Alguien sabe como calcular el punto de interseccion entre dos rectas usando la formula general Ax+By+C=0? Esto sin tener en cuenta mi codigo.

Grax
Volver arriba
GrayFox



Registrado: 28 Ene 2007
Mensajes: 47

MensajePublicado: 23/07/2007 11:16 am
Título: Solucionado

El problema estaba en la funcion corte en la linea que calcula "fy"
Dejo el codigo por si a alguien le interesa. Ademas tube que agregar un par de "IF" para evitar errores en ciertos casos particulares (Rectas paralelas y primer recta horizontal) NO_CORTE es = a 99999 que se sale del plano de dibujo. Lo que modifique es r2.m_fA*r1.m_fC-r1.m_fA*r2.m_fC inverti el orden de la resta.

Antes:
Código:

   Coordenada Corte(Recta r1, Recta r2)
   {
      float fy = ((r2.m_fA*r1.m_fC-r1.m_fA*r2.m_fC)/(r2.m_fA*r1.m_fB-r1.m_fA*r2.m_fB));
      float fx;
      fx=r2.GetX(fy);
      return GetCoor(fx,fy);
   }

Despues:
Código:

Coordenada Corte(Recta& r1, Recta& r2)
   {
      if(r1.m_fA==r2.m_fA&&r1.m_fB==r2.m_fB)
         return GetCoor(NO_CORTE,NO_CORTE);
      float fy = ((r1.m_fA*r2.m_fC-r2.m_fA*r1.m_fC)/(r2.m_fA*r1.m_fB-r1.m_fA*r2.m_fB));
      float fx;
      if(r1.m_fA==HORIZONTAL_A)
         fx = r2.GetX(fy);
      else
         fx = r1.GetX(fy);
      return GetCoor(fx,fy);
   }


De todos modos gracias
Salu2
GrayFox
Volver arriba
      Índice del Foro elrincondelc.com -> Gráficos
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com