1
2 //+ Jonas Raoni Soares Silva
3 //@ http://jsfromhell.com
4
5
6
7 typedef struct {
8 float x1, x2, y1, y2;
9 } Segmento;
10
11 typedef struct {
12 float x, coefLinear;
13 } EquacaoDaReta;
14
15 void preencherSegmento( Segmento *s ){
16 printf( "Entre com as coordenadas do segmento A no formato: x1,y1,x2,y2:" );
17 scanf( "%f,%f,%f,%f", &s->x1, &s->y1, &s->x2, &s->y2 );
18 }
19
20 float calcularTangente( Segmento *s ){
21 return tangenteInvalida( s ) ? 0 : ( s->y1 - s->y2 ) / ( s->x1 - s->x2 );
22 }
23
24 int tangenteInvalida( Segmento *s ){
25 return !( s->x1 - s->x2 );
26 }
27
28 int main( int argc, char *argv[] ){
29 Segmento segA, segB;
30 EquacaoDaReta eqA, eqB;
31 float tangenteA, tangenteB;
32 float interseccaoX, interseccaoY;
33
34 preencherSegmento( &segA );
35 preencherSegmento( &segB );
36
37 tangenteA = calcularTangente( &segA );
38 tangenteB = calcularTangente( &segB );
39
40 if( tangenteInvalida( &segA ) && tangenteInvalida( &segB ) ){
41 printf( "As retas sao paralelas, portanto nunca se cruzam.");
42 system( "pause" );
43 return 0;
44 }
45 else if( tangenteInvalida( &segA ) ){
46 interseccaoX = segA.x1;
47 interseccaoY = segB.y1 + tangenteB * ( segA.x1 - segB.x1 );
48 }
49 else if( tangenteInvalida( &segB ) ){
50 interseccaoX = segB.x1;
51 interseccaoY = segA.y1 + tangenteA * ( segB.x1 - segA.x1 );
52 }
53 else if( tangenteA == tangenteB ){
54 printf( "As retas sao paralelas, portanto nunca se cruzam.");
55 system( "pause" );
56 return 0;
57 } else {
58 eqA.x = tangenteA;
59 eqA.coefLinear = tangenteA * -segA.x1 + segA.y1;
60
61 eqB.x = tangenteB;
62 eqB.coefLinear = tangenteB * -segB.x1 + segB.y1;
63
64 interseccaoX = ( eqB.coefLinear - eqA.coefLinear ) / ( eqA.x - eqB.x );
65 interseccaoY = eqA.x * interseccaoX + eqA.coefLinear;
66 }
67
68 printf( "\nO ponto de interseccao eh: (%f, %f )", interseccaoX, interseccaoY );
69 system( "pause" );
70 return 0;
71
72 }