• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalkulator przeliczający stopnie alfa na sinus alfa

VPS Starter Arubacloud
0 głosów
421 wizyt
pytanie zadane 14 września 2021 w JavaScript przez Martita Bywalec (2,470 p.)
Dzień dobry

Szukałam i nie znalazłam.

Chciałabym napisać program kalkulator w JavaScript, przeliczający stopnie alfa na sinus alfa według wzoru.

Jeśli jest taka możliwość to z jakiego wzoru musiałabym skorzystać?

3 odpowiedzi

+1 głos
odpowiedź 14 września 2021 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 21 września 2021 przez Martita
 
Najlepsza

Może metoda Math.sin?

komentarz 14 września 2021 przez Martita Bywalec (2,470 p.)
edycja 14 września 2021 przez Martita
Nie może być bo użytkownik wprowadza stopień.

To ma być kalkulator taki jak na stronie https://www.naukowiec.org/przelicznik-katow.html
1
komentarz 14 września 2021 przez ScriptyChris Mędrzec (190,190 p.)
1
komentarz 14 września 2021 przez Martita Bywalec (2,470 p.)
Dzięki
+1 głos
odpowiedź 14 września 2021 przez J0ker Pasjonat (15,400 p.)
Możesz zaimplementować przeliczenie kąta na jego sinus sam/sama

sinus(x) to w przyblizeniu x - x^3/3! + x^5/5! - x^7/7! + x^9/9! ... i tak w nieskończonośc. Im więcej składników uwzględnisz tym dokładniejsze przybliżenie. ! oznacza oczywiście silnię. Silnię zaimplementuj wzorem-przybliżeniem Stirlinga, bo rekurencja jest zbyt wolna.
komentarz 15 września 2021 przez Martita Bywalec (2,470 p.)
To ma być przelicznik ze stopni alfa na sinus alfa.

Przykład
Użytkownik wprowadza 90 i po kliknięciu oblicz pokazuje się wynik 1.0000
komentarz 15 września 2021 przez J0ker Pasjonat (15,400 p.)
No właśnie, i napisałem Ci jak to zrobić.
komentarz 15 września 2021 przez Martita Bywalec (2,470 p.)

Nie za bardzo rozumiem ten wzór x - x^3/3! + ...

3/3 to potęga liczby x

! (silnia) odnosi się do potęgi czy liczby?

 

komentarz 15 września 2021 przez Martita Bywalec (2,470 p.)
Jestem początkująca. O coś takiego chodzi? Oczywiście dołączę odpowiedni kod. Tylko nie wiem jak to teraz połączyć. Proszę o pomoc.

e (2,7182...)
pi (3,1415...)
wzór stirlinga math.pow((x/2,7182),x) * math.sqrt(2 * 3,1415 * x)

x - math.pow(x,3/3)! + math.pow(x,5/5)! - math.pow(x,7/7)! + math.pow(x,9/9)!...
komentarz 15 września 2021 przez ScriptyChris Mędrzec (190,190 p.)
A dlaczego liczysz to na piechotę, skoro można to zrobić przez wbudowane metody?
komentarz 16 września 2021 przez J0ker Pasjonat (15,400 p.)

@Marta Długa, wzór stirlinga dobrze, ale w tym drugim to źle

x^3/3!, silnia jest w mianowniku a do potęgi podnosisz tylko x.

 

 

komentarz 16 września 2021 przez J0ker Pasjonat (15,400 p.)
A zdajesz sobie sprawę człowieku że te wbudowane metody nie biorą wartości funkcji sinus od krasnoludków tylko obliczają ją stosując dokładnie takie przybliżenie jakie napisałem?
komentarz 16 września 2021 przez ScriptyChris Mędrzec (190,190 p.)
Ja nie odniosłem się do sposobu liczenia, więc nie wiem skąd Twoje oburzenie.

Mój komentarz odniósł się do tego, że skoro są wbudowane metody, to po co męczyć się z samodzielnym liczeniem całości? Chyba, że liczenie samo w sobie jest częścią zadania lub metody wbudowane nie są wystarczające do rozwiązania problemu. Nie zauważyłem jednak, żeby autorka pytania o tym wspomniała. W pytaniu jest zapytanie o wzór do obliczeń, co niekoniecznie oznacza, że celem zadania jest samodzielne liczenie tego - autorka mogła po prostu nie wiedzieć, że nie trzeba wymyślać koła na nowo.
komentarz 19 września 2021 przez Martita Bywalec (2,470 p.)

@J0ker, przepraszam ale jestem początkująca w programowaniu JavaScript i nie wiele jeszcze o tym wiem. Niestety na studiach też nie wiele nam o tym mówią.

komentarz 19 września 2021 przez Martita Bywalec (2,470 p.)
Nie oburzam się. Jestem początkująca i nie za bardzo wiem jak to powinno wyglądać aby po wprowadzeniu przez użytkownika i kliknięciu oblicz pokazał się wynik 1.0000.

Chciałam to obliczyć tym sposobem co pokazał nam wykładowca na przykładzie pola koła, kuli, kwadratu, prostokąta, trójkąta.

Jak obliczałam ręcznie według Twojego wzoru to wynik mi się nie zgadzał i stąd to pytanie.
komentarz 19 września 2021 przez Martita Bywalec (2,470 p.)

@J0ker, wzór będzie

x - math.pow(x,3) / 3! + math.pow(x,5) / 5!  - math.pow(x,7) / 7! + math.pow(x,9) / 9! ...

Tylko zamiast ! będzie 

* math.pow((x/2,7182),x) * math.sqrt(2 * 3,1415 * x)

Czy to jest dobrze? Jeśli nie to jak to prawidłowo powinno wyglądać? Chciałabym zastosować const i document.getElementById. Tylko w ten sposób uczono nas na studiach.

0 głosów
odpowiedź 20 września 2021 przez Martita Bywalec (2,470 p.)

Jestem początkująca. Błagam o pomoc już kilka dni z tym się męczę i nie mam zielonego pojęcia jak to zrobić.

Nie wiem gdzie mam błąd Po wpisaniu przez użytkownika 90 wynik pokazuje NaN a powinien pokazać 1.0000 lub przynajmniej 1.

Ma to być kod bez @param.

<!DOCTYPE html>
<html lang="pl">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="stopien_sinus.js"></script>
</head>

<body>
    <form id="oblicz" action="" method="post" autocomplete="off">
        <div>
            <h3>Przelicznik Stopnia Alfa na Sinus Alfa</h3>
            Stopień Alfa <input type="number" id="SS"><br>
            <span id="SIN">= </span><br><br>
            <input type="button" value="Oblicz" onclick="oblicz()">
            <input type="reset" value="RESETUJ" onclick="resetuj()">
        </div>
    </form>

</body>

</html>
function oblicz () {
    const SS = document.getElementById('SS').value;
    const SIN = parseInt(SS) * (180 / Math.PI) ;
    document.getElementById('SIN').innerHTML = SS * '(180 / Math.PI) = ';
    return false;
}

function resetuj () {

    document.getElementById('SIN').innerHTML = '';

}

 

komentarz 20 września 2021 przez ScriptyChris Mędrzec (190,190 p.)
const SS = document.getElementById('SS').value;
const SIN = parseInt(SS) * (180 / Math.PI) ;
document.getElementById('SIN').innerHTML = SS * '(180 / Math.PI) = ';

W trzeciej linijce powyższego fragmentu próbujesz mnożyć string przez string. Poza tym chyba robisz błąd w obliczeniach, bo dzielisz 180 przez PI zamiast odwrotnie. I nie wiem, czy prawidłowo liczysz SIN.

Taki kod działa:

  const SS = parseInt(document.getElementById("SS").value);
  const SIN = Math.sin(SS * Math.PI / 180);
  document.getElementById("SIN").innerHTML = SIN;

 

komentarz 20 września 2021 przez Martita Bywalec (2,470 p.)
edycja 20 września 2021 przez Martita

Niestety nie działa. Po kliknięciu oblicz nie pokazuje wyniku.

Ja np. na pole kuli zastosowałam kod i na wzór tego kodu chciałam zrobić kalkulator przeliczający stopnie na sinus tylko wzór bym zmieniła.

Korzystałam z kodu

function oblicz() {
    const R = document.getElementById('R').value;
    const pkl = 4 * 3.14 * parseInt(R) * parseInt(R);
    document.getElementById('pkl').innerHTML = '4 * 3,14 * ' + R + ' * ' + R + ' = ' + pkl.toFixed(2);
    return false;
}
function resetuj () {

    document.getElementById('pkl').innerHTML = '';

}

 

komentarz 20 września 2021 przez Martita Bywalec (2,470 p.)
edycja 20 września 2021 przez Martita

@ScriptyChris, działa zrobiłam

function oblicz () {
const SS = parseInt(document.getElementById("SS").value);
const SIN = Math.sin(parseInt(SS) * Math.PI / 180);
 document.getElementById("SIN").innerHTML = Math.sin(SS * Math.PI / 180) + ' = ' + SIN.toFixed(4);
return false;
}

 

komentarz 20 września 2021 przez Martita Bywalec (2,470 p.)
edycja 20 września 2021 przez Martita

Po wpisaniu przez użytkownika 90 stopni wynik sinusa 1 = 1.0000 wychodzi poprawny.

Niestety wynik cosinusa 6.123233995736766e-17 = 0.0000 już nie do końca jest poprawny. Zamiast  6.123233995736766e-17 powinno być 0. Natomiast 0.0000 jest poprawne.

Co zrobić aby zamiast 6.123233995736766e-17 pokazał się wynik 0?

function oblicz () {
const SS = parseInt(document.getElementById("SS").value);
const KOS = Math.cos(parseInt(SS) * Math.PI / 180);
 document.getElementById("COS").innerHTML = Math.cos(SS * Math.PI / 180) + ' = ' + COS.toFixed(4);
return false;
}

Zastosowałam parseInt, ale to pokazał się wynik 6 zamiast 0.

Już wiem

function oblicz () {
const SS = parseInt(document.getElementById("SS").value);
const KOS = Math.round(Math.cos(parseInt(SA) * Math.PI / 180));
 document.getElementById("COS").innerHTML = Math.round(Math.cos(SA * Math.PI / 180)) + ' = ' + KOS.toFixed(4);
return false;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 1,598 wizyt
pytanie zadane 23 października 2016 w C i C++ przez MadMax Początkujący (260 p.)
+1 głos
2 odpowiedzi 1,227 wizyt
pytanie zadane 26 lipca 2016 w C i C++ przez dziubi21 Początkujący (310 p.)
+2 głosów
2 odpowiedzi 10,315 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...