All pastes #835770 Raw Edit

Instersection of two lines

public text v1 · immutable
#835770 ·published 2007-12-29 00:59 UTC
rendered paste body
program prog;
uses wincrt;
var
		m1, m2, b1, b2: real;
		x1, y1, x2, y2: real;
		x3, y3, x4, y4: real;
		x, y: real;
		m1_inf, m2_inf: byte;
		
function readreal(s: string) : real;
var
	temp: real;
begin
	write('Enter ', s, ': ');
	readln(temp);
	readreal := temp; 
end;

function getslope(x1, y1, x2, y2: real) : real;
begin
	getslope := (y1 - y2) / (x1 - x2);
end;

function getintercept(x, y, m: real) : real;
begin
	getintercept := y - (m*x);
end;

function gety(x, m, b: real) : real;
begin
	gety := m1*x + b1;
end;

begin
	m1_inf := 0;
	m2_inf := 0;
	
	m1 := 0;
	m2 := 0;
	
	x1 := readreal('x1');
	y1 := readreal('y1');
	
	x2 := readreal('x2');
	y2 := readreal('y2');
	
	x3 := readreal('x3');
	y3 := readreal('y3');
	
	x4 := readreal('x4');
	y4 := readreal('y4');
	
	if (x1 = x2) then begin
		m1_inf := 1;
	end
	else begin
		m1 := getslope(x1, y1, x2, y2);
		b1 := getintercept(x1, y1, m1);
	end;
	
	if (x3 = x4) then begin
		m2_inf := 1;
		b2 := -1;
	end
	else begin
		m2 := getslope(x3, y3, x4, y4);
		b2 := getintercept(x3, y3, m2);
	end;
	
	if ((m1 = m2) and (b1 = b2)) or ((m1_inf = 1) and (m2_inf = 1) and (x1 = x3)) then begin
		writeln('Infinite solutions');
	end
	else if (m1 = m2) or ((m1_inf = 1) and (m2_inf = 1)) then begin
		writeln('No solution');
	end
	else begin
		if (m1_inf = 1) then begin
			x := x1;
			m1 := m2;
			b1 := b2;
		end
		else if (m2_inf = 1) then begin
			x := x3;
		end
		else begin
			x := (b2 - b1) / (m1 - m2);
		end;
		y := gety(x, m1, b1);
		writeln('Intersection is at (', x:0:5, ', ', y:0:5, ')');
	end;
end.