logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak obliczyć sin(x) w stopniach w języku C? Przeliczanie na radiany?

dziechu 18 Maj 2012 15:29 5464 15
REKLAMA
  • #1 10910247
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 71
    Funkcja sin(x) przyjmuje wartości x w radianach. Ja potrzebuję obliczyć sin dla x w stopniach. Czy jest jakis sposób wywołania sin(x) w 'C' aby funkcja przyjęła x jako stopnie, czy też przed podaniem x muszę sam przeliczyć je na radiany?
    ---------------------------------------------------------------------------
    Moderator - "3.1.17. Zabronione jest publikowanie wpisów obniżających ogólny poziom dyskusji, wynikających z lenistwa lub zawierających roszczeniowy charakter wypowiedzi.

    Ręce opadają :/
    Może taki wzór coś koledze podpowie :/ ...itd.
    ---------------------------------------------------------------------------
    Kolego moderatorze - przed wyrzuceniem tematu do kosza i całkowitym opadnieciem rąk, proszę uważniej przeczytać post. Nie pytam o wzór, bo wzory matematyczne znam, nie jestem leniem, nie obniżam poziomu dyskusji a moja wypowiedź nie ma charakteru roszczeniowego. Będąc początkującym w 'C', pytam czy jest jakas forma wywołania funkcji sin(x) tak, aby x było przyjęte jako stopnie kątowe a nie radiany, czy też muszę sobie przeliczyć sam stopnie na radiany. Nie pytam jak przeliczyć.
  • REKLAMA
  • #2 10910439
    krzyjak
    Poziom 29  
    Posty: 1074
    Pomógł: 110
    Ocena: 137
    Możesz napisać/znaleźć gotową funkcję zamiany stopni na radiany i to co zwraca ta funkcja przekazujesz do sin(x) jako argument. Oczywiście nie musi być to od razu funkcja. To jest raptem jedna linijka w C, która dokonuje takiego przeskalowania. Zresztą to jest czysta matematyka. Gotowej funkcji w C nie ma. Trudno, by do każdej pierdoły umieszczać funkcję w kompilatorze. Nie dziw się, że moderator się czepia, bo takie pytanie mocno obniża poziom forum.
  • #3 10910544
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 71
    Ok, jak wspomniałem wiem że można przeliczyć, wiem że to jedna linijka. Moje pytanie dotyczyło sposobu przekazania wartości funkcji i ewentualnie jednostek, jak np. a=sin[stopnie](x); czy coś wtym stylu. Rozumiem że nie ma czegos takiego, a jak to zrobić inaczej, to też już pisałem że wiem. Podobnie jak moderator nie zrozumiałeś chyba dokładnie pytania, a ja nie wiem jak jeszcze bardziej zrozumiale miałbym je sformuować. Pytam, ponieważ akurat nic o tym nie ma w książkach itp. Jeżeli takie pytanie obniża poziom forum, to 85% pytań na elektrodzie obniża poziom forum.
  • #4 10911124
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    Zupełnie nie rozumiem czemu kompilatory nie stosują naturalnej miary jaką jest podział kąta pełnego na okrągłą liczbę 32 rumbów.
    I żeglarzom też by się to spodobało.

    można sobie przeciążyć np. sin(int stopnie, int minuty, int sekundy)
    z pewnością da się to jeszcze bardziej udziwnić, a wszystko by nie napisać sin(S2R*X)
  • REKLAMA
  • #6 10911868
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 71
    Ok, dzięki:). Chyba jednak źle postawiłem problem. Nie chodzi mi o to jak tego sinusa wyliczyć dla x w stopniach, bo to wiem. Jak napisałem, uczę się od niedawna C i chodziło mi tylko o to czy mozna jakoś przekazać kompilatorowi wprost rózne jednostki dla sin czy innych funkcji, chodzi mi o poznanie mozliwości C, żeby własnie nie pisać 2 linii tam gdzie mozna 1, lub 5 stałych/zmiennych, tam gdzie mozna 2. Wynika z tych odpowiedzi że nie mozna i że liczy tylko w radianach i to mi wystarczy.

    Dodano po 8 [minuty]:

    P.S. Mimo wszystko jestem bardziej przywiazany do stopni kątowych niż radianów, jak chyba wiekszość. Bardziej kojarzy mi się kąt prosty z 90' niż z jakąś częścią radiana, kiedy czytam gdzieś np. 5' czy 15', potrafię sobie dość dokładnie taki kąt wyobrazić. Kiedy czytam np. 1/2 radiana, to już trochę trudniej. Pamiętam tez wykuwanie na pamieć w szkole średniej wartosci sin, cos dla 0', 30', 45' itd...Dla mnie stopnie kątowe są bardziej naturalną jednostką i nie byłoby w tym nic dziwnego, gdyby kompilator jako domyślną jednostke używał własnie stopni.
  • #7 10912217
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    jesteśmy przyzwyczajeni do tego, że 1/3 to około 0.33, a tu masz - wiele kompilatorów powie, że to jest zero :)
  • #8 10912349
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 71
    Xitami napisał:
    jesteśmy przyzwyczajeni do tego, że 1/3 to około 0.33, a tu masz - wiele kompilatorów powie, że to jest zero :)

    I będzie miało rację, bo pokaże tylko część całkowitą, chyba że odpowiednio zada się im to pytanie deklarując odpowiednie zmienne, co nie wymaga jednak żadnych przeliczeń. No to dorzucę inny przykład - wszystkie kalkulatory jakie posiadałem, łącznie z tymi z Win, po wpisaniu sin(90) pokaże 1, co oznacza że jednak stopnie kątowe zostały przyjęte jako jednostka podstawowa (oczywiście pomijam kalkulatory gdzie mozna sobie ustawić wybraną jednostkę). Tak więc przyjęcie przez tworców bibliotek jako jednostki podstawowej radiana, nie do końca jest takie oczywiste.
    Pewnie gdyby do jakichś obliczeń biblioteki używały jednostki masy i długości, to byłyby to funty i cale:)
  • REKLAMA
  • #9 10912362
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    To ja innym rzucę - powiedz Anglikowi, że coś waży 50dag i zrobi wielkie oczy. Powiedz Polakowi, że coś waży 5lb i też nie będziesz wiedział, ile to jest.

    Np taki rodzimy język programowania LOGO w f. trygonometrycznych przyjmuje jako argument właśnie miarę w stopniach.

    Tworzenie funkcji do wszystkiego to błędne koło, ale jak napisał kolega, nic nie stoi na przeszkodzie, aby funkcję przeciążyć i napisać własną, gdzie poda się miarę w stopniach, minutach i sekundach, lub po prostu napisać o innej nazwie, która przyjmie takie parametry, a która wykona proste mnożenie (dzielenie) aby przeliczyć miary i wykorzystać sin. Jak wcześniej zostało także powiedziane, można równie dobrze napisać sobie funkcję przeliczającą, którą będziesz mógł użyć jako argumentu dla wszystkich funkcji trygonometrycznych.
  • #10 10912446
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 71
    Można, można:) Dyskusja jest czysto teoretyczna, bo w tej chwili do niczego mi ten sinus nie jest potrzebny, wczoraj bawiłem się pisaniem funkcji wyświetlających rózne wykresy na TFT, miedzy innymi sin(x) i zdziwiło mnie że rysując f=sin(x) dla x (0, 360) działy sie dziwne rzeczy. Szukałem przyczyny w różnych miejscach i dopiero po kilkunastu minutach olśniło mnie że kompilator nie przyjmuje stopni tylko radiany. Nie chodzi o to co mozna, bo mozna praktycznie wszystko, ale o pewne uporządkowanie. Używanie w dalszym ciągu róznych jednostek, pomimo istnienia od wielu lat norm, było przyczyną wielu problemów, w tym jednej (o ile nie więcej) katastrofy lotniczej, więc problem wcale tak banalny nie jest i to że 'mozna' nie załatwia wszystkiego.
  • REKLAMA
  • #11 10912597
    Dżyszla
    Poziom 42  
    Posty: 7077
    Pomógł: 1095
    Ocena: 226
    Powszechnie przyjęty układ SI nie definiuje w żaden sposób miar kąta. Jednak wynikającą wprost jednostką pochodną z podstawowych jest radian, czyli m/m. I myślę, że na tym powinniśmy zamknąć ten temat.
  • #12 10912797
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    No i o to się tu głównie rozbija. Dla was lepszy stopień a z punktu widzenia matematycznego bardziej naturalnym sposobem na opisanie kąta jest radian jako miara kąta łukowego.

    Wprost z definicji nietrudno sobie wyobrazić jaki będzie kąt.
  • #13 10912828
    beluosus
    Poziom 25  
    Posty: 362
    Pomógł: 123
    Ocena: 18
    dziechu napisał:
    Szukałem przyczyny w różnych miejscach i dopiero po kilkunastu minutach olśniło mnie że kompilator nie przyjmuje stopni tylko radiany.

    Moim zdaniem podstawą jest przeczytanie dokumentacji dotyczącej funkcji, która sprawia nam problem zamiast eksperymentować z kodem.
    Uważam, że radian jest bardziej elegancki matematycznie i praktycznie tylko tych jednostek używa się na studiach technicznych. Jest ściśle powiązany z pi i wszystkie obliczenia wygodniej robi się stosując radiany. Jeśli chcemy coś przeliczyć ze stopni to praktycznie zawsze najpierw zamieniamy na radiany. Myślę, że przyzwyczajenie do stopni jest wyniesione ze szkoły podstawowej oraz średniej i nie ma żadnego uzasadnienia.
    Częściej można się spotkać z narzekaniem, że w niestandardowych bibliotekach domyślną jednostką jest stopień (np OpenGL).
    Z tego co właśnie przeczytałem to radian jest jednostką pochodną w układzie SI (o stopniach nie ma mowy) co znowu bardziej przemawia za tą jednostką.
    Równie dobrze mógłbyś się zastanawiać dlaczego grady nie są domyślną jednostką stosowaną w bibliotece standardowej.
  • #14 10913062
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 71
    Wchodzimy w obszar 'gustów', a o gustach sie nie dyskutuje. Jasne że radian jest w wielu sytuacjach bardziej praktyczny, ale nie zmienia to faktów o których pisałem - mimo tego co twierdzicie, wszystkie znane mi kalkulatory, jeżeli nie mają wyboru jednostek, maja przyjete stopnie kątowe podczas obliczeń sin, cos... no i druga sprawa - Anglicy, Amerykanie nadal stosują swoje cale i funty, mimo że jest to z naszego punktu widzenia bardzo niepraktyczne. Dyskusja jest już w zasadzie zamknięta kilka postów wyżej, teraz to takie luźne dywagacje:)

    "Wprost z definicji nietrudno sobie wyobrazić jaki będzie kąt."
    Tu nie zgodzę się zupełnie. Jednak przyzwyczajenie i doswiadczenie ma dużą wagę. Jak napisałem powyżej - potrafię dość precyzyjnie 'na oko' odmierzyc kąt 15', 30', 5' itd... natomiast miałbym sporą trudność z odmierzeniem 'na oko' 1/7 radiana - wymagałoby to wyobrażenia sobie radiana, jego 1/7 cześci itd...
  • #15 10913340
    gaskoin
    Poziom 38  
    Posty: 4159
    Pomógł: 436
    Ocena: 102
    dziechu od złej strony na to patrzysz. Radiany przy obliczeniach rzadko kiedy występują same sobie. Z reguły wyraża się je z liczbą pi co ułatwia sprawę.

    I tu nie chodzi o gusta, obliczenia na radianach są prostsze niż na stopniach. Łatwiej chyba uprościć kąt 12943234253245805032858pi niż 230472934768276512373255 stopni. Przy radianach od razu widać a przy stopniach? :D
  • #16 10913385
    dziechu
    Poziom 27  
    Posty: 1609
    Pomógł: 27
    Ocena: 71
    Ależ zgadzam się, w praktyce nie mialem do czynienia z programami gdzie tego typu obliczenia byłyby konieczne. Pisze tylko o sile przyzwyczajenia i za przyklad podaję angielskie funty, stopy, cale itd. - dla mnie zupełnie niepraktyczne a jednak nie potrafia sie ich pozbyć. System metryczny, gdzie 1m = 100cm = 1000mm..., 1kg = 1000g... chyba nawet dla Anglików byłby bardziej sensowny, niż 1ft = 12" = 1/3 jarda.. a nie chcą się ich pozbyć:)

Podsumowanie tematu

✨ W dyskusji poruszono problem obliczania wartości funkcji sinus w języku C dla kątów wyrażonych w stopniach, podczas gdy standardowa funkcja sin(x) przyjmuje argumenty w radianach. Uczestnicy forum sugerują, że przed przekazaniem wartości do funkcji sin(x) należy przeliczyć stopnie na radiany, co można zrealizować za pomocą prostego wzoru. Zauważono, że nie istnieje wbudowana funkcja w C, która przyjmowałaby stopnie jako argument. Wiele osób wyrażało swoje preferencje dotyczące jednostek miary, wskazując na powszechne przyzwyczajenie do stopni, mimo że radiany są bardziej naturalną jednostką w kontekście matematycznym. Dyskusja dotyczyła również różnic w przyzwyczajeniach kulturowych związanych z jednostkami miary.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA