/* =============================================================================================
   Wilfredo Cruz Yarlequé                              wcruzy@gmail.com
   Piura, Perú, Enero 19 de 2025
   
   =============================================================================================
   Para dos lineas rectas:
   
   - Lee coordenadas de dos puntos de cada línea recta
   - Calcula la ecuación de cada línea recta
   - Si pendientes son bastante parecidas no calcula intercepción de las líneas rectas
   - Si pendientes son diferentes, se calcula las coordenadas donde se interceptan ambas líneas
   ============================================================================================= */

#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;

class punto
{
	public:
		int x, y;
};

double pendiente(int, int, int, int);

double intercepto(int, int, double);

int main()
{
	punto pa1, pa2, pb1, pb2;
	double ma, ia;
	double mb, ib;
	double x, y;

	// Leer Linea A
	cout << "Linea A:\n";

	// Leer coordenadas del primer punto:
	cout << "Ingrese coordenadas del primer punto: ";
	cin >> pa1.x >> pa1.y;

	// Leer coordenadas del segundo punto:
	cout << "Ingrese coordenadas del segundo punto: ";
	cin >> pa2.x >> pa2.y;

	// Leer Linea B
	cout << "Linea B:\n";

	// Leer coordenadas del primer punto:
	cout << "Ingrese coordenadas del primer punto: ";
	cin >> pb1.x >> pb1.y;

	// Leer coordenadas del segundo punto:
	cout << "Ingrese coordenadas del segundo punto: ";
	cin >> pb2.x >> pb2.y;

	// Calcula pendiente e intercepto de Linea A
	ma = pendiente(pa1.x, pa1.y, pa2.x, pa2.y);
	ia = intercepto(pa2.x, pa2.y, ma);

	// Escribe ecuación de la linea A:
	cout << "\nEcuación de la recta A" << "\nY = " << ma << "X + " << ia << "\n";

	// Calcula pendiente e intercepto de Linea B
	mb = pendiente(pb1.x, pb1.y, pb2.x, pb2.y);
	ib = intercepto(pb2.x, pb2.y, mb);

	// Escribe ecuación de la linea B:
	cout << "\nEcuación de la recta B" << "\nY = " << mb << "X + " << ib << "\n";

	// Calcula coordenadas de intercepción de las lineas A y B
	if (abs(ma - mb) < 0.1)
		cout << "\nLas rectas tienen la misma pendiente, por lo que no se interceptan\n";
	else
	{
		x = (ib - ia) / (ma - mb);
		y = ma * x + ia;
		cout << "\nIntercepción de las dos líneas:\n" << x << ", " << y << "\n\n";
	}

	return 0;
}

/* ================================== Funciones ================================== */
double pendiente(int x1, int y1, int x2, int y2)
{
	return (y2-y1)*1.0/(x2-x1);
}

double intercepto(int x, int y, double m)
{
	return y-m*x;
}