w jaki sposob obliczyc kąt zawarty miedzy dwoma kreskami
oto te kreski :-P :-P
with canvas do
begin
moveto(0, 200);
lineto(400, 200);
moveto(200, 0);
lineto(30, 200);
end;
chodzi mi o ten kąt ostry [cya] [browar]
w jaki sposob obliczyc kąt zawarty miedzy dwoma kreskami
oto te kreski :-P :-P
with canvas do
begin
moveto(0, 200);
lineto(400, 200);
moveto(200, 0);
lineto(30, 200);
end;
chodzi mi o ten kąt ostry [cya] [browar]
Kąt ten to Arcus tangens (30/200) ;)
a moglbys mi napisac procedurke np pod buttona bo nebardzo wiem jak to przerobic :-8
k:=arctan(30/200);
a w jaki sposob wyswietlic obliczony kat w stopniach ?? np 45stopni :)
k:=arctan(30/200);
moglbys mi podac ktore to są punkty ?? :/
Te "kreski" musisz potraktowąć jako wektory.
Jeżeli masz "kreski" od punkut A do B oraz od C do D, to tworzysz wektory:
V = [Bx-Ax; By-Ay]
oraz
U = [Dx-Cx; Dy-Cy]
teraz:
IlSkal := UxVx+UyVy //x i y oznaczają odpowiednio pierwszą i drugą współrzędną wektora
IlDl := Sqrt(VxVx + VyVy)Sqrt(UxUx + Uy*Uy)
cos(alfa) := IlSkal/IlDl;
a Twój kąt to:
alfa := arccos(IlSkal/IlDl); :)
A w tym konkretnym wypadku to można nawet łatwiej.
tg(alfa) := (200-0)/(200-30) = 200/170 = 20/17
alfa := arctan(20/17);
Hmm. Detox. Chyba się troszkę pomyliłeś :)
k := 180k/pi;
SetRoundMode(rmDown);
k_str := IntToStr(Round(k)) + '°' + IntToStr(Round(60(k-Round(k)))) + `' + FloatToStrF(60*(60*(k-Round(k)) - Round(60*(k-Round(k)))),ffFixed,15,Prec) + ``;
SetRoundMode(rmNearest);
Bobik: ale ty kombinujesz. Wystarczy tak:
k := 180k/pi;
k_str := IntToStr(Trunc(k)) + '°' + IntToStr(Trunc(60Frac(k))) + `' + FloatToStrF(60Frac(60Frac(k)), ffFixed, 15, Prec) + ``;
:)