Spis treści:

Kategoria:HTMLJavaScript


Kalkulator kalorii - jazda na rowerze

Licznik kalorii

Waga ciała (kg):
Czas jazdy (min):
Średnia prędkość (km/h):
Oblicz
Energia (kcalW wielu miejscach wynik podawany jest w kaloriach (cal). W praktyce nie stosuje się tej jednostki, bo jest ona zbyt mała. Znacznie częściej stosuje się kilokalorie (kcal), które są jednostką 1000 razy większą. 1 kcal = 1000 cal.):

Dlaczego inne kalkulatory liczą inaczej?

Podczas przygotowania aplikacji sam byłem zaskoczony znaczną rozpiętością wyników. Co zauważyłem? Po pierwsze, w wielu przypadkach zupełnie pomija się masę ciała. Trzeba wiedzieć, że ma ona niebagatelne znaczenie. W przypadku wolnej jazdy główną siłą, którą rowerzysta musi przezwyciężyć, są opory tarcia. Te, zgodnie z fizycznymi wzorami, zależą głównie od masy (współczynnik tarcia nie zmienia się). W przypadku jazdy szybkiej głównym przeszkadzającym są opory powietrza. Te z kolei, w wielu testowanych kalkulatorach, reprezentowane były przez funkcje liniowe. Oznacza to, że dwukrotny wzrost prędkości zwiększa zapotrzebowanie energetyczne również dwukrotnie. Nie jest to prawdą, o czym można się przekonać doświadczalnie. Zależność jest przynajmniej kwadratowa (dwukrotny wzrost prędkości to czterokrotny wzrost zapotrzebowania), a w praktyce nawet nieco większa (nieliniowe zależności elementów ruchomych, np. łożysk). Dane do kalkulatora zostały pobrane z kilku źródełDistance Cycling - John Hughes, Daniel KehlenbachThe Everything Bicycle Book - Roni SarigEssentials for Health and Wellness - Gordon Edlin, Eric Golanty, Kelli McCormack BrownCalculating Cycling Calories - Kimberly J. BrownAccurate Caloric Expenditure of Bicyclists using Cellphones - Andong Zhan, Marcus Chang, Yin Chen, Andreas Terzis, jednostki zostały uwspólnione i policzona została średnia. Dla wyliczonej średniej wyznaczona została funkcja wielomianowa, która z najlepszym przybliżeniem odwzorowała otrzymane w wyniku obliczeń wartości. Tablice kalorii zawierały wartości nie przekraczające 48 km/h, nie ma zatem pewności, że wyznaczony wielomian będzie równie dobrze przybliżał koszty energetyczne powyżej tej prędkości. Jeszcze innym czynnikiem mocno wpływającym na wynik kaloryczny jest różnica wzniesień. Zakładam, że jazda odbywała się po stosunkowo płaskim terenie i zakończyła na tej samej wysokości. Oczywiście mocno pofałdowany teren zwiększa, a czasem nawet znacznie zwiększa zapotrzebowanie energetyczne organizmu.

Jak zrobić podobny kalkulator?

Zwykle swoje wpisy zaczynam inaczej. Uznałem jednak, że przypadkowo mogą tu trafić ludzie, których nie interesuje matematyczno-informatyczna strona kalkulatora. Nadzedł czas na treść dla niektórych właściwą. Tworzenie podobnych kalkulatorów nie jest zadaniem szczególnie trudnym i można w nim wyróżnić kilka etapów. Są to:

  1. zbieranie danych,
  2. wyznaczanie funckji przybliżającej,
  3. implementacja.

Najtrudniejszym z etapów jest zbieranie danych. Dlaczego tak uważam? Dlatego, że dostęp do niektórych danych może być utrudniony, może istnieć wiele źródeł danych, które są ze sobą sprzeczne. Poszukując danych dotarłem nawet do takiej zaskakującej informacji, że wędkowanie jest bardziej kaloriożerne niż trzepanie dywanów (liczone na godzinę). Nie badałem tematu dokładniej, ale na chłopski rozum coś tu nie gra. To głównie od tego pierwszego etapu zależy dokładność podobnego kalkulatora. Sprawa jest znacznie prostsza, gdy znany jest dokładny wzór. Kalkulator liczący pole prostokąta mógłby nawet całkowicie pominąć pierwszy etap.

Drugi etap to przybliżanie funkcji. O ile w przypadku pola prostokąta wzór jest powszechnie znany i nie trzeba niczego przybliżać, o tyle w przypadku kalkulatora energetycznego (kalorycznego) jazdy na rowerze trzeba coś wymyślić samemu. Na tym etapie przydaje się intuicja - należy oszacować, czy wynikowa funkcja będzie liniowa, wielomianowa, a może wykładnicza lub potęgowa? Przy kalkulatorze rowerowym nie miałem pewności co to będzie, choć kształt wykresu sugerował wielomian. W takim przypadku trzeba przetestować każdą z prawdopodobnych metod i zbadać, które z dopasowań jest lepsze. Do wyznaczenia wielomianu można zastosować metodę interpolacji wielomianowej albo skorzystać z jakiejś sprytnej aplikacji, która zrobi to za nas. Można na przykłąd skorzystać z Excela - wyrysować wykres, zaznaczyć bieżące wskazanie, kliknąć na nim prawym przyciskiem myszy i wybrać opcję Wyznacz linię trendu.... Można od razu zaznaczyć opcję Wyświetl równanie na wykresie i cieszyć się z gotowego wzoru.

Sama implementacja nie powinna juz być problemem.

Implementacja w JavaScript i HTML

Uznałem, że głównymi parametrami w liczniku kalorii są trzy składniki: masa ciała (zależność liniowa), czas (zależność liniowa), oraz prędkość (zależność wielomianowa). Szacowanie zależności spalonych kalorii od prędkości doprowadziło do uzyskania następującego wielomianu:

X = 0.6345*v*v+0.7563*v+36.725

Gdzie v - prędkość, X - [spalone kalorie]/[godzinę]/[60 kg]. Godzina to zbyt duża jednostka, więc należy ją zamienić na minutę, podobnie 60 kg (ujednolicone podczas liczenia średniej z dostępnych tablic), które należy sprowadzić do jednego kilograma. Takie przekształcenie daje następującą postać wzoru:

Y = (0.6345*v*v+0.7563*v+36.725)/(60*60)

Tym razem X oznacza [spalone kalorie]/[minutę]/[kg]. Te zależności należy wymnożyć przez podaną wagę ciała i liczbę minut jazdy. Daje to ostateczny wzór w postaci:

K = m*t*(0.6345*v*v+0.7563*v+36.725)/(3600)

Gdzie m - masa (waga ciała), t - czas jazdy w minutach, v - prędkość. Należy pamiętać, że prędkość jest uśredniona. Wspomniałem wcześniej, że zależność spalonych kalorii od prędkości nie jest liniowa, więc takie uśrednianie może mieć wpływ na wynik. Z drugiej strony podawanie prędkości przedziałami byłoby zupełnie niepraktyczne. Coś za coś. Implementacja samego wzoru to już drobnostka:

<script type="text/javascript">
function ObliczKalorieClick()
{
  var m = parseInt(document.getElementById('waga').value);
  var t = parseInt(document.getElementById('czas').value);
  var v = parseInt(document.getElementById('predkosc').value);
  var result = m*t*(0.6345*v*v+0.7563*v+36.725)/3600;
  document.getElementById('kcal').innerHTML = Math.round(result);
}
</script>

Teraz wystarczy tylko umieścić na stronie HTML pola do wprowadzania danych z identyfikatorami waga, czas i predkosc oraz jakiś element do wyświetlenia wyniku o identyfikatorze kcal. Gdyby komuś coś sprawiało problemy odsyłam do źródeł tej strony - tam można znaleźć kod JavaScript oraz potrzebny do tego fragment HTML.

Kategoria:HTMLJavaScript

, 2013-12-20

Komentarze:

Zwk (2015-12-07 22:02:14)
Szukałem kalkulatora uwzględniającego wartość prędkości średniej i znalazłem tylko ten. Brawo! Niestety jest w nim drobny błąd a raczej jedna niedopowiedziana rzecz (a może zostało to uwzględnione w obliczeniach) - jeśli chodzi o obliczanie zużytej energii powinno się uwzględnić wagę roweru, która może mieć trochę wpływu na wynik.

Mnie zastanawia dodanie kolejnej zmiennej - różnicy wzniesień. Liczniki często posiadają taką funkcję, owszem niedokładną bo polegającą na przeliczaniu zmiany ciśnienia atmosferycznego, ale to nie problem by ewentualny błąd skorygować (odjąć). Oczywiście przydałoby się sprawdzić statystycznie jak duży tu jest błąd.Trudniejszą rzeczą jest powiązanie różnicy wzniesień i prędkości średniej. Dlaczego ? Teoretycznie można wyliczyć dodatkowe zużycie energii na pokonanie wzniesień jako zmiany energii potencjalnej (Ep=mgh). Pytanie jaką część tak wyliczonej energii dodać do końcowego wyniku, ponieważ rowerzysta zjeżdżając z góry, część energii odzyskuje. Poza tym powolny rowerzysta przy zjeździe nie wydatkuje już żadnej energii, a szybszy rowerzysta kręci korbą by jeszcze szybciej zjechać - mimo że odzyskuje energię potencjalną to dodatkowo zużywa energię na pokonanie większych oporów powietrza, których by nie było przy jeździe po poziomym terenie, bo nie rozpędziłby się do takiej prędkości.
antek (2016-05-01 22:58:21)
myślę że zadałeś sobie sporo dobrego trudu,choć moje wyniki zamiast 1400 kcal dają 900... szkoda. Ale jedno wiem na pewno: to że jesli coś jest nieliniowe nie oznacza że ma potęgi kwadratowe lub wyższe, może mieć potęgi ułamkowe !!!
Zwk (2016-05-15 22:32:42)
Niedawno zarejestrowałem się na Kręć Kilometry i tam niestety obliczenia kalorii uwzględniają liniową zależność (tak mi wyszło z obliczeń). O ile dla ok 20 km/h różnica z tym kalkulatorem jest niewielka to dla spacerowego tempa 10km/h tamten kalkulator okropnie zawyża (nawet o 100%).
szcpos (2017-04-30 10:17:18)
Według moich doświadczeń Twój kalkulator jest dostatecznie dokładny, ale tylko w płaskim terenie. np. w sobotę jadę nocować na działce i według GPS-a jadę 260m do góry, wracam następnego dnia "zjeżdżam" do domu.
I tu druga sprawa, wydaje się zasadne podawanie masy całego zestawu, z rowerem i ekwipunkiem. Mój rower szosowy waży 9,8 kg, dla porównania mój wyprawowy z pełnymi sakwami ważył ostatnio 24,4... a i jeszcze trochę więcej na grzbiecie ciuchów bo wiosna nas w tym roku nie rozpieszcza. :) Pozdro! i dzięki za dobrą robotę!
Aneta (2017-06-05 12:48:37)
Moim zdaniem do najdokładniejszy z kalkulatorów.
Robiąc pomiary dzięki aplikacji w telefonie spalanie było trzy krotnie wyższe niż na zegarku sportowym.
Myślałam że zegarek źle działa. ten kalkulator potwierdza iż zegarek jest ok al. aplikacja do duuuupy.
Darek Santocko (2021-03-24 12:11:31)
Tego właśnie szukałem.Super
Kamil (2021-04-22 10:52:55)
Wspaniała strona. Bardzo fajnie, że jest wytłumaczone jak zrobić podobny kalkulator. Dzięki temu wiadomo, jak to działa.
Tomek (2021-09-27 18:51:58)
Super robota, korzystając z innych internetowych kalkulatorow po prostu wątpiłem w ich prawdomówność, w końcu trafiłem tutaj i wynik w końcu jest wiarygodny. 40 km w 2 h 810 kcal, ciekawostka: na fitatu wyliczyło mi 5700 kcal 😊 najlepiej będzie chyba jak kupię zegarek sportowy.
Dodaj komentarz
Wyślij
Ostatnie komentarze
Dzieki za rozjasnienie zagadnienia upsert. wlasnie sie ucze programowania :).
Co się stanie gdy spróbuję wyszukać:
SELECT * FROM NV_Airport WHERE Code='SVO'
SELECT * FROM V_Airport WHERE Code=N'SVO'
(odwrotnie są te N-ki)
Będzie konwersja czy nie znajdzie żadnego rekordu?