Dwusieczna kąta
Janusz Sobieraj - 28 LO

Jak zaprogramować rysowanie dwusiecznej kąta ?

W rombie przekątna jest dwusieczną kątów o wierzchołkach, które łączy. Wektorowo oznacza to równość (patrz rys.):
. Rysunek ilustruje rozwiązanie, w którym doprowadzamy do tego by odcinki ramion kąta miały tę samą długość.
W praktyce zwykle mamy sytuację, że rysujemy dwusieczną < CAB, gdzie punkty C, A i B nie wyznaczają rombu.

Przypomnę jeszcze wzory:
długość wektora:
suma wek. :
iloczyn przez liczbę:

Aplet pokazuje poprawność rozwiązania, poniżej kod funkcji realizujących wzory.

pkt2d wektor(pkt2d p,pkt2d k) 
{ 
 return(new pkt2d(k.x-p.x , k.y-p.y)); 
} 
//---------------------------------------- 
pkt2d suma(pkt2d x,pkt2d y) 
{ 
 return(new pkt2d(x.x+y.x , x.y+y.y)); 
} 
//----------------------------------------- 
pkt2d skaluj(double t , pkt2d x) 
{ 
 return(new pkt2d(t*x.x , t*x.y)); 
} 

Możesz zmieniać położenie punktów A, B i C, przeciągając je myszą w dowolne miejsce. Obserwuj dwusieczną kąta.
I na koniec dwusieczna oraz funkcja licząca długość wektora:
void dwusieczna(Graphics g,pkt2d C,pkt2d A,pkt2d B) 
{ 
  pkt2d a=wektor(A , B); 
  pkt2d b=wektor(A , C); 
  double da=dlugosc(a); 
  double db=dlugosc(b); 
  pkt2d w_dw=suma(skaluj(db,a) , skaluj(da,b)); 
  prosta(g , A , suma(A , w_dw),0,1.4); 
}
double dlugosc(pkt2d a) 
{
 return(Math.sqrt(a.x*a.x+a.y*a.y));
}