// gcc -g -o t3s_recta t3s_recta.c -lm
#include <stdio.h>
#include <math.h>

#define EPSILON	0.0001	// marge d'error

typedef struct {
	float x, y;
	// double x, y;
} t_punt;

typedef struct {
	t_punt a, b;
} t_recta;

void main() {
	t_punt p;
	t_recta r;
	double distancia;

	printf("Intro punt 'x,y': ");
	scanf("%f,%f", &p.x, &p.y);
	// scanf("%lf,%lf", &p.x, &p.y);
	printf("Intro recta 'x1,y1 x2,y2': ");
	scanf("%f,%f %f,%f", &r.a.x, &r.a.y, &r.b.x, &r.b.y);
	// scanf("%lf,%lf %lf,%lf", &r.a.x, &r.a.y, &r.b.x, &r.b.y);
	distancia = fabs(((r.a.y-r.b.y)/(r.a.x-r.b.x))*(p.x-r.b.x)+r.b.y-p.y);
	if (distancia < EPSILON) {
		printf("El punt pertany a la recta\n");
	} else {
		printf("El punt NO pertany a la recta\n");
	}
	printf("Distancia entre punt i recta = %.15lf. Error permes = %f\n",
		distancia, EPSILON);
}

/*
 * Pots provar amb:
6.64576057605760576050,7.12
0,0 3.111,3.333
 */

/*
 * Que hem calculat de tal forma que el punt sigui de la recta
$ bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
3.111/3.333
.93339333933393339333
7.12*.93339333933393339333
6.64576057605760576050
$
*/

/*
 * I retorna:
$ ./a.out 
Intro punt 'x,y': 6.64576057605760576050,7.12
Intro recta 'x1,y1 x2,y2': 0,0 3.111,3.333
El punt pertany a la recta
Distancia entre punt i recta = 0.000000186116422. Error permes = 0.000100
$ 
 * Si enlloc de floats treballessim amb doubles en aquest cas la distancia
 * seria:
Distancia entre punt i recta = 0.000000000000000. Error permes = 0.000100
 */

