Jak policzyć kąt pomiędzy ...??

0

Na zadanie domowe dostałem zadanie napisania programu który ma liczyć:
długość podanych wektorów
iloczyn skalarny tych wektorów
iloczyn wektorowy
i kąt pomiędzy nimi.
Napisałem program który lźle liczy kąt i nie mam pojęcia jak to poprawić.. Oto mój program:

program wektor;
type
  float = single;
var
  x1,y1,z1,       {współrzędne 1 wektora}
  x2,y2,z2,       {współrzędne 2 wektora}
  dlug1,dlug2,    {długość wektora 1 i 2}
  ils,            {iloczyn skalarny}
  ilw1,ilw2,ilw3, {iloczyn wektorowy współrzędne}
  kat,            {kąt pomiędzy wektorami}
  x:              {wartość cosinusa kąta zawartego pomiędzy wektorami}
                  float;

function ArcCos(const x : float) : float;
begin
  if abs(x) < 1 then
    ArcCos := ArcTan(x/sqrt (1-sqr (x)))
  else ArcCos := 3.4e38;
end;

begin        {początek programu głównego}
  writeln('Podaj współrzędne pierwszego wektora');
  readln(x1,y1,z1);
  writeln('Podaj współrzędne drugiego wektora');
  readln(x2,y2,z2);

  {obliczanie długości}
  dlug1:= sqrt(sqr(x1) + sqr(y1) + sqr(z1));
  dlug2:= sqrt(sqr(x2) + sqr(y2) + sqr(z2));

  {obliczanie iloczynu skalarnego}
  ils:= dlug1 * dlug2 * ((x1*x2 + y1*y2 + z1*z2)/(dlug1*dlug2));

  { obliczanie iloczynu wektorowego}
  ilw1:= (y1 * z2) - (z1 * y2);
  ilw2:= (z1 * x2) - (x1 * z2);
  ilw3:= (x1 * y2) - (y1 * x2);

  {obiczanie kąta pomiędzy wektorami}
  x:=((x1*x2 + y1*y2 + z1*z2)/(dlug1*dlug2));
  kat:=ArcCos(x);


  {wyświetlanie wyników}
  writeln;
  writeln('--------------------------------------------------------------------------------');
  writeln('| Długość wektora pierwszego wynosi:          |',dlug1);
  writeln('| Długość wektora drugiego wynosi:            |',dlug2);
  writeln('| Iloczyn skalarny tych wektorów wynosi:      |',ils);
  writeln('| Iloczynem wektorowym tych wektorów jest     |');
  writeln('| wektor o współrzędnych                      | x:',ilw1);
  writeln('|                                             | y:',ilw2);
  writeln('|                                             | z:',ilw3);
  writeln('| Kąt pomiędzy wektorami wynosi:              |',kat);
  writeln('--------------------------------------------------------------------------------');

  readln
end.

proszę o pomoc

0

Wzoru nie sprawdziłem bo nie znam - ale może czekasz na kąt w stopniach, a komputer pokazuje wartość w radianach. ?

0

Chaciałbym tylko wyjaśnić, że przeliczenie na radiany robi się następująco:
360 stopni = 2Pi radianów, więc
1 stopień = 2Pi/360
z proporcji można wyliczyć, że
kąt w stopniach = (kąt w radianach*360)/2Pi

Mam nadzieję, że pomogłem :)

0

Licząc kąt w radianach * 180 / Pi, unikasz mnożenia 2 * Pi.

// Edited:
I dołączać kolejny moduł wywoływać funkcję dla tak prostych obliczeń itd.? Nie, IMHO prościej bezpośrednio tak liczyć.

0

nie prościej RadToDeg i DegToRad :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1