Dwie proste
Janusz Sobieraj - 28 LO

Jak wyznaczyc punkt przeciecia prostych ?

Dwie proste moga oczywiscie sie przecinac. Ten na pozór drobny fakt w konstrukcjach ma niebanalne znaczenie. Nieraz wykonujemy pare czynnosci po to by uzyskac punkt, który zwykle jest czescia wspólna innych figur.
Matematycy rozwiazuja wtedy uklad równan.
Zakladam, ze potrafisz rozwiazac uklad równan liniowych metoda wyznaczników.

Mamy dwie proste l1 = pr(A,B) i l2 = pr(C,D):
l1 =[ax+t(bx-ax),ay+t(by-ay)] oraz
l2 =[cx+s(dx-cx),cy+s(dy-cy)]
Znalezc punkt P= l1 ∩ l2 to rozwiazac uklad:
ax+t(bx-ax)=cx+s(dx-cx)
ay+t(by-ay)=cy+s(dy-cy)
   i dalej po przeksztalceniu:
t(bx-ax)-s(dx-cx)=cx-ax
t(by-ay)-s(dy-cy)=cy-ay
   Oblicze niezbedne wyznaczniki:
(bx-ax)   (cx-dx)
(by-ay)   (cy-dy)

=D


(cx-ax)   (cx-dx)
(cy-ay)   (cy-dy)
=Dt


Obliczam parametr t=Dt / D
a dalej punkt P z równania prostej l1.
Definiuje niezbedne funkcje by zrealizowac w/w obliczenia:
double det(double a11,double a12,double a21,double a22) 
{ 
 return(a11*a22-a12*a21); 
} 
//----------------------------------------- 
pkt2d wspolny(pkt2d a,pkt2d b,pkt2d c,pkt2d d) 
{double D,Dt,t; 
  D=det(b.x-a.x,c.x-d.x,b.y-a.y,c.y-d.y); 
  Dt=det(c.x-a.x,c.x-d.x,c.y-a.y,c.y-d.y); 
  t=Dt/D; 
  
  return(new pkt2d(a.x+t*(b.x-a.x),a.y+t*(b.y-a.y))); 
} 


W aplecie mozesz zmieniac polozenie punktów A, B, C i D, przeciagajac je mysza w dowolne miejsce. Obserwuj wspólrzedne punktu przeciecia.