Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyliczanie kąta z podanych wymiarów a i b
Forum PHP.pl > Forum > PHP
tiraeth
Witam.. mam problem. Chciałem pobawić się z gd2 i wymyśliłem sobie wyrysowanie wykresu funkcji liniowej, tylko teraz mam problem :/

Jak wyliczyć kąt pod którym będzie padać linia mając podane szerokość a i wysokość b

Przykład
Kod
    ^
  4-|      /
    |     /
  3-|    /
    |   /
  2-|  /
    | /
  1-|/
--------------------->
      | | | | | | | |
      1 2 3 4 5 6 7 8

W tym wypadku linia pada pod kątem 45 stopni (umownie bo przechodzi przez punkt (1,1)

a = 1
b = 1


Tylko nie wiem jak to obliczyć smile.gif Pomocy exclamation.gif biggrin.gif
lolek09
Nie znam gd2, ale czy nie ma tam funkcji, która rysuje prostą przechodzącą przez 2 podane punkty obrazu? Byłoby to dużo łatwiejsze, wystarczy wyliczyć dwie wartości i puścić prostą przez te 2 punkty.

Jeśli niema czegoś takiego, to zostaje tylko trygonometria sad.gif Nie wiem, czy php implementuje jakieś funkcjie trygonometryczne, ale jeśli nie, to będziesz musiał po prostu przepisać tablice trygonometryczne.
bela
Cytat(lolek09 @ 2005-03-26 18:22:35)
Jeśli niema czegoś takiego, to zostaje tylko trygonometria sad.gif Nie wiem, czy php implementuje jakieś funkcjie trygonometryczne, ale jeśli nie, to będziesz musiał po prostu przepisać tablice trygonometryczne.

Jasne, że są, wystarczy zobaczyć do manuala biggrin.gif
math" title="Zobacz w manualu PHP" target="_manual
CyklOP
php ma wszystkie istotniejsze funkcje - zarówno trygonometryczne jak i logarytmy, potęgi itp. więc nie ma problemu smile.gif

a jak kąt policzyć? smile.gif Normalne funkcje trygonometryczne smile.gif
czyli jak masz prostą y = ax + b, to a = tg alfa (czyli tangens konta nachylenia).
arcus tangens (a) = kąt nachylenia (alfa). Funkcje musisz sobie sam znaleźć w dokumentacji. Jeśli nie o to chodziło, to sorry ;]

Edit: spóźniłem się ;] ale druga część posta może się przyda.
tiraeth
mam coś takiego:

  1. <?
  2. <?php
  3. $x = 3;
  4. $y = 1;
  5.  
  6. $r = sqrt($y*$y+$x*$x);
  7.  
  8. $cos = cos($x/$r);
  9.  
  10. echo $cos;
  11. ?>

i to wyświetla mi cosinus tego trójkąta (umownego) smile.gif ale teraz nie wiem jaka funkcja albo wzór matematyczny zamieni cos na kąt smile.gif
Ociu
hm...
Władować wszystkie kąty wraz z wartościami do tablicy ? smile.gif
tiraeth
dalej.. mam teraz funkcję arcos cosinusa smile.gif i teraz zwraca mi w radianach i teraz jak wywalam rad2deg() to zwraca mi 56... stopni a w tablicy mam między 18 a 19...

  1. <?php
  2. $x = 3;
  3. $y = 1;
  4.  
  5. $r = sqrt($y*$y+$x*$x);
  6.  
  7. $cos = cos($x/$r);
  8. $rad = acos($cos);
  9. $alfa = rad2deg($rad);
  10.  
  11. echo $alfa;
  12. ?>
CyklOP
A w radianach dobrą wartość podaje?
tiraeth
Właśnie, że mam problem ze zrozumieniem... kończę dopiero gimnazjum smile.gif

wyniki:

radian: 0.948683298051
cosinus: 0.582753610702

według tablic matematycznych kąt alfa powinien wynosić 18-19 stopni, a wykorzystując funkcję rad2deg zwraca mi 56 z kawałkiem... nie rozumiem.

Odrazu zaznaczam, że taki sam wynik zwraca mi w EXCEL'u: 54,35554907 bo sprawdzałem.
CyklOP
Wszystko jasne.
Poprawny kod:

  1. <?php
  2. $x = 3;
  3. $y = 1;
  4.  
  5. $r = sqrt($y*$y+$x*$x);
  6.  
  7. $cos = $x/$r;
  8. $rad = acos($cos);
  9. $alfa = rad2deg($rad);
  10.  
  11. echo $alfa;
  12. ?>


$cos = $x/$r;
zamiast $cos = cos($x/$r); !
po prostu x / r = cos alfa, z definicji. Nie nalezy tego "cosinusować" jeszcze smile.gif
Jabol
popatrz na to:
jak obliczyć kąt przecięcia dwóch prostych (dla funkcji zapisaychj: y=m1*x+n1 oraz y=m2*x+n2):
tan ALFA =| (m2 - m1)/(1+m1*m2) |
dla Ciebie m1 = 0, więc
tan ALFA =| m2/1 |
tan ALFA =|m2| (ew. tan ALFA = |m1|, zależy jak przekształcasz) // czyli dokładnie to, co napisał CyklOP
czyli idąc dalej:
tan-1 m2 = ALFA

  1. <?php
  2. $a=XXX;//wysokość
  3. $b=XXX;//szerokość (różna od 0!!!)
  4. $m=$a/$b;
  5. $alfarad=atan($m);
  6. $alfadec=rad2dec($alfarad);//wynik!!!
  7. if($alfadec>(float)90) $alfadec=(float)180-$alfadec;
  8. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.