Prosta, odcinek, półprosta
Janusz Sobieraj - 28 LO

Jak w programie rysować linię prostą, odcinek, półprostą ?

Tak, czy inaczej będę rysował odcinek z punktu początkowego p do punktu końcowego k.
To proste, w klasie lo28 mamy zestaw potrzebnych procedur.
Ale napiszę dodatkową procedurę (jedną), która odpowiednio użyta, da w efekcie prostą, odcinek lub półprostą. Wykorzystam równanie parametryczne prostej .

Niech prostą wyznaczają dwa punkty P(x,y) i K(x,y) (rys.) Równanie daje możliwość wyznaczenia dowolnego punktu prostej np A(x,y).

Zauważ, że A=Tt∙v(P)
A jest obrazem P w przesunięciu o wektor )
tzn  
A=(x , y)=(p.x+t∙v.x , p.y+t∙v.y)
(*)


void prosta(Graphics g,pkt2d p,pkt2d k,double tp,double tk) 
{ pkt2d v=new pkt2d(k.x-p.x , k.y-p.y); 
  pkt2d P=new pkt2d(p.x+tp*v.x , p.y+tp*v.y));
  pkt2d K=new pkt2d(p.x+tk*v.x , p.y+tk*v.y));
  lo28.linia(g,P,K);
}

Równanie (*) przez zmianę parametru t pozwoli rysować, w zależności od potrzeb:
  1. odcinek dla tp=0; tk=1
  2. prostą dla tp<0; tk>1
  3. półprostą PKdla tp=0; tk>1
Oto potrzebna nam procedura w działaniu. Podobnie jak w programie C.a.R możesz zmieniać położenie punktów P i K, przeciągając je myszą w dowolne miejsce. Obserwuj równanie otrzymanej prostej.
W aplecie obok procedura prosta jest wywoływana:
  1. dla odcinka : prosta(g,p,k,0.1)
  2. dla prostej : prosta(g,p,k,-0.4,1.4)
  3. dla półprostej PK : prosta(g,p,k,0,1.4)

Uwaga:
dla prostej i półprostej, w rzeczywistości parametry tp tk należy wyznaczyć bardziej subtelnie. Wypada uzyskać efekt "dociągania" do brzegów ekranu.
Parametry ±0.4 oraz ±1.4 należy traktować jako absolutnie przykładowe.
Praktyczne rozwiązanie tego problemu polega, oczywiście, na wyznaczeniu odpowiednich punktów przecięcia z brzegami apletu (ekranu).