Prosta, odcinek, półprosta
|
Jak w programie rysować linię prostą, odcinek, półprostą ?
|
- Wstęp
- Konstrukcje geometryczne
- Rozwiązanie programistyczne
- Autor
|
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:
- odcinek dla tp=0; tk=1
- prostą dla tp<0; tk>1
- półprostą PK→dla 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:
- dla odcinka : prosta(g,p,k,0.1)
- dla prostej : prosta(g,p,k,-0.4,1.4)
- 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).
|