var realPvalue; function powerTime(sex,intensity,powerrow,t,v) { VykonMuzi = Array(23.50,11.50,7.60,6.62, 23.16,11.35,7.46,6.50, 22.82,11.20,7.33,6.38, 22.48,11.05,7.19,6.26, 22.14,10.90,7.06,6.14, 21.80,10.75,6.92,6.02, 21.46,10.60,6.79,5.91, 21.12,10.45,6.65,5.79, 20.78,10.30,6.52,5.67, 20.44,10.15,6.38,5.55, 20.10,10.00,6.25,5.43, 19.76,9.85,6.11,5.31, 19.42,9.70,5.97,5.19, 19.08,9.55,5.84,5.07, 18.74,9.40,5.70,4.95, 18.40,9.25,5.57,4.84, 18.06,9.10,5.43,4.72, 17.72,8.95,5.30,4.60, 17.38,8.80,5.16,4.48, 17.04,8.65,5.03,4.36, 16.70,8.50,4.89,4.24, 16.36,8.35,4.75,4.12, 16.02,8.20,4.62,4.00, 15.68,8.05,4.48,3.88, 15.34,7.90,4.35,3.76, 15.00,7.75,4.21,3.64, 14.66,7.60,4.08,3.53, 14.32,7.45,3.94,3.41, 13.98,7.30,3.81,3.29, 13.64,7.15,3.67,3.17, 13.30,7.00,3.53,3.05, 12.96,6.85,3.40,2.93, 12.62,6.70,3.26,2.81, 12.28,6.55,3.13,2.69, 11.94,6.40,2.99,2.57, 11.60,6.25,2.86,2.46, 11.26,6.10,2.72,2.34, 10.92,5.95,2.59,2.22, 10.58,5.80,2.45,2.10, 10.24,5.65,2.32,1.98, 9.90,5.50,2.18,1.86); VykonZeny = Array(19.98,9.78,6.46,5.63, 19.69,9.65,6.34,5.53, 19.40,9.52,6.23,5.42, 19.11,9.39,6.11,5.32, 18.82,9.27,6.00,5.22, 18.53,9.14,5.88,5.12, 18.24,9.01,5.77,5.02, 17.95,8.88,5.65,4.92, 17.66,8.76,5.54,4.82, 17.37,8.63,5.42,4.72, 17.09,8.50,5.31,4.62, 16.80,8.37,5.19,4.51, 16.51,8.25,5.07,4.41, 16.22,8.12,4.96,4.31, 15.93,7.99,4.85,4.21, 15.64,7.86,4.73,4.11, 15.35,7.74,4.62,4.01, 15.06,7.61,4.51,3.91, 14.77,7.48,4.39,3.81, 14.48,7.35,4.28,3.71, 14.20,7.23,4.16,3.60, 13.91,7.10,4.04,3.50, 13.62,6.97,3.93,3.40, 13.33,6.84,3.81,3.30, 13.04,6.72,3.70,3.20, 12.75,6.59,3.58,3.09, 12.46,6.46,3.47,3.00, 12.17,6.33,3.35,2.90, 11.88,6.21,3.24,2.80, 11.59,6.08,3.12,2.69, 11.31,5.95,3.00,2.59, 11.02,5.82,2.89,2.49, 10.73,5.70,2.77,2.39, 10.44,5.57,2.66,2.29, 10.15,5.44,2.54,2.18, 9.86,5.31,2.43,2.09, 9.57,5.19,2.31,1.99, 9.28,5.06,2.20,1.89, 8.99,4.93,2.08,1.79, 8.70,4.80,1.97,1.68, 8.42,4.68,1.85,1.58); if (sex=='F') { Vykon = VykonZeny; } else { Vykon = VykonMuzi; } switch (intensity) { case 0: tcor = t; break; case 1: tcor = t*2; break; case 2: tcor = t*2; break; case 3: tcor = t*2; break; case 4: tcor = 4*3600; break; case 5: tcor = 6*3600; break; case 6: tcor = 6*3600; break; case 7: tcor = 6*3600; break; } if (tcor<60) { P = tcor*(Vykon[powerrow*4+1]-Vykon[powerrow*4])/55-(Vykon[powerrow*4+1]-Vykon[powerrow*4])/11+Vykon[powerrow*4]; } else if(tcor<300) { P = tcor*(Vykon[powerrow*4+2]-Vykon[powerrow*4+1])/240-(Vykon[powerrow*4+2]-Vykon[powerrow*4+1])/4+Vykon[powerrow*4+1]; } else if(tcor<720) { P12 = 1.04*Vykon[powerrow*4+3]; P = tcor*(P12-Vykon[powerrow*4+2])/420-(P12-Vykon[powerrow*4+2])/1.4+Vykon[powerrow*4+2]; } else { P = Vykon[powerrow*4+3]-Vykon[powerrow*4+3]*0.05*Math.log(tcor/1200)/Math.log(2); } switch (intensity) { case 2: P*=0.9; break; case 3: P*=0.7; break; case 4: P*=0.9; break; case 5: P*=0.7; break; case 6: P*=0.6; break; case 7: P*=0.5; break; } if (v!=null && v<25) { P *= 1-((25-v*3.6)*(25-v*3.6))/2000; } return P; } function calcTimeFromPower(sloup,dist,from,to,frict,res,m,P,realP) { ov = 0; t=0; s=0; last = from; if (realP!=null) { realP=0; } for (i=0; i0 && dist[i-1]>to) break; if (dist[i]>to) rdist=to; else rdist = dist[i]; FG = 9.81*m*(sloup[i]+frict); tmp = P*P/(4*res*res)+FG*FG*FG/(27*res*res*res); if (tmp<0) tmp=0; else tmp = Math.pow(tmp,0.5); tmp2 = P/(2*res)-tmp; if (tmp2<0) tmp2=-Math.pow(-tmp2,1/3); else tmp2=Math.pow(tmp2,1/3); v = Math.pow((P/(2*res)+tmp),1/3)+tmp2; if (realP!=null) { if (v*3.6<25) Ptmp = P*(1-((25-v*3.6)*(25-v*3.6))/2000); else Ptmp = P; tmp = Ptmp*Ptmp/(4*res*res)+FG*FG*FG/(27*res*res*res); if (tmp<0) tmp=0; else tmp = Math.pow(tmp,0.5); tmp2 = Ptmp/(2*res)-tmp; if (tmp2<0) tmp2=-Math.pow(-tmp2,1/3); else tmp2=Math.pow(tmp2,1/3); v = Math.pow((Ptmp/(2*res)+tmp),1/3)+tmp2; realP+=Ptmp*(rdist-last)/(v<2.5?v=2.5:v); } if (isNaN(v)) v=ov; else ov=v; if (v<2.5) v=2.5; t+=(rdist-last)/v; s+=rdist-last; last=rdist; } if (realP!=null) { realP/=t; } realPvalue=realP; return t; } function writeOutput(s,t,P) { sec = Math.round(t%60); if (sec<9) sec = '0'+sec; document.getElementById('power').value = Math.round(P); document.getElementById('velocity').value = Math.round(36*s/t)/10; document.getElementById('totaltime').value = parseInt(t/60)+':'+sec; } function calcLevel(P,t,sex,intensity) { for (i=0; i<41; i++) { NP=powerTime(sex,intensity,i,t); if (P>NP*document.getElementById('mass').value) { index = readCookie('levelsavedvaluesindex'); if (index==null) index = 0; createCookie("levelsavedvaluesindex",parseInt(index)+1); createCookie("levelsavedvalues["+index+"][value]",i); sec = Math.round(t%60); if (sec<9) sec = '0'+sec; createCookie("levelsavedvalues["+index+"][name]","Cukrák - "+parseInt(t/60)+':'+sec+" ("+Math.round(P)+"W)"); switch(i) { case 0: case 1: document.getElementById('level').selectedIndex = 1; break; case 2: case 3: case 4: case 5: case 6: document.getElementById('level').selectedIndex = 2; break; case 7: case 8: case 9: case 10: document.getElementById('level').selectedIndex = 3; break; case 11: case 12: case 13: case 14: document.getElementById('level').selectedIndex = 4; break; case 15: case 16: case 17: case 18: document.getElementById('level').selectedIndex = 5; break; case 19: case 20: case 21: case 22: document.getElementById('level').selectedIndex = 6; break; case 23: case 24: case 25: case 26: document.getElementById('level').selectedIndex = 7; break; case 27: case 28: case 29: case 30: document.getElementById('level').selectedIndex = 8; break; case 31: case 32: case 33: case 34: document.getElementById('level').selectedIndex = 9; break; case 35: case 36: document.getElementById('level').selectedIndex = 10; break; case 37: case 38: document.getElementById('level').selectedIndex = 11; break; case 39: case 40: document.getElementById('level').selectedIndex = 12; break; } break; } ONP = NP; } } function calculate() { createCookie('mass',document.getElementById('mass').value); createCookie('bikemass',document.getElementById('bikemass').value); createCookie('startfromcukrak',document.getElementById('from').value); createCookie('finishtocukrak',document.getElementById('to').value); m = parseFloat(document.getElementById('mass').value) + parseFloat(document.getElementById('bikemass').value); v = parseFloat(document.getElementById('velocity').value); P = parseFloat(document.getElementById('power').value); intensity = parseFloat(document.getElementById('intensity').value); position = parseFloat(document.getElementById('position').value); position2 = parseFloat(document.getElementById('position2').value); sex = document.getElementById('sex').value; bt = parseFloat(document.getElementById('biketype').value); tstr = document.getElementById('totaltime').value; ttt = tstr.split(":"); if (ttt.length>1) { tt = parseFloat(ttt[0])*60+parseFloat(ttt[1]); } else { tt = parseFloat(tstr); } from = parseFloat(document.getElementById('from').value); to = parseFloat(document.getElementById('to').value); powerrow = parseInt(document.getElementById('level').value); if (isNaN(from)) from = 0; if (isNaN(to)) to = 6226.75; s = from; t = 0; stot = 6226.75; if (to=0) { P = powerTime(sex,intensity,powerrow,stot/4); realP = 0; ot = 0; do { ot = t; t = calcTimeFromPower(sloup,dist,from,to,frict,res,m,P,realP); OP = P; P=powerTime(sex,intensity,powerrow,t); P*=parseFloat(document.getElementById('mass').value); } while ( Math.abs(t-ot)>t/600) writeOutput(s,t,realPvalue); } else if (!isNaN(tt)) { P = powerTime(sex,intensity,30,stot/4); ot = 0; factor = 32; OP = P; j=0; do { ot = t; t = calcTimeFromPower(sloup,dist,from,to,frict,res,m,P); if (tt>t) { if (OPP) factor/=2; OP=P; P+=factor; } } while ( Math.abs(t-tt)>tt/500 ) P = OP; writeOutput(s,t,P); calcLevel(P,tt,sex,intensity); } else if (!isNaN(P)) { t = calcTimeFromPower(sloup,dist,from,to,frict,res,m,P); writeOutput(s,t,P); calcLevel(P,t,sex,intensity); } else if (!isNaN(v)) { tt = 3.6*(to-from)/v; P = powerTime(sex,intensity,30,stot/4); ot = 0; factor = 32; OP = P; j=0; do { ot = t; t = calcTimeFromPower(sloup,dist,from,to,frict,res,m,P); if (tt>t) { if (OPP) factor/=2; OP=P; P+=factor; } } while ( Math.abs(t-tt)>tt/500 ) P = OP; writeOutput(s,t,P); calcLevel(P,tt,sex,intensity); } else { alert("Musíte zadat buď úroveň, nebo výkon, nebo čas, nebo rychlost"); return; } P = parseFloat(document.getElementById('power').value); document.getElementById('consumedenergy').value = Math.round((P + t*P*72/28)/4186+(1.5/60)*t); document.getElementById('consumedoxygen').value = Math.round(((10.9*P + 8.2*((18*s/t)>90?90:18*s/t) + 8.3*document.getElementById('mass').value)-559.6)*t/60000); switch (intensity) { case 0: fatcf = 0.12*(1-160/t); break; case 1: fatcf = 0.17*(1-160/t); break; case 2: fatcf = 0.25*(1-160/t); break; case 3: fatcf = 0.4*(1-160/t); break; case 4: fatcf = 0.3; break; case 5: fatcf = 0.45; break; case 6: fatcf = 0.7; break; case 7: fatcf = 0.75; break; } if (fatcf<0) fatcf = 0; cf = Math.round(fatcf*document.getElementById('consumedenergy').value*4.186/2.8)/10; cf2 = Math.round(10*(t-27*60)/t*cf)/10; if (cf2<0) cf2=0; document.getElementById('consumedfat').value = cf2+'('+cf+')'; } function mapClick(event) { obj = document.getElementById('climbMap'); x = event.offsetX?event.offsetX:event.pageX-event.target.offsetLeft; y = event.offsetY?event.offsetY:event.pageY-event.target.offsetTop; X0 = -752308; Y0 = -1061680; YM = -1052180; width = 300.607142857; SCALE=8417/width; x=X0+x*SCALE; y=YM-y*SCALE; pointsX = Array( -746397,-746391,-746410,-746436,-746456,-746509,-746518,-746533,-746545,-746556,-746599,-746653,-746682,-746697,-746720,-746742,-746756,-746781,-746804,-746812,-746823,-746831,-746849,-746862,-746892,-746935,-747006,-747096,-747175,-747243,-747281,-747314,-747339,-747465,-747522,-747524,-747518,-747510,-747501,-747497,-747472,-747469,-747466,-747464,-747465,-747474,-747509,-747540,-747567,-747603,-747613,-747629,-747641,-747647,-747659,-747663,-747670,-747677,-747725,-747773,-747816,-747852,-747882,-747909,-747942,-747984,-748016,-748027,-748016,-748015,-748014,-748015,-748015,-748020,-748046,-748125,-748176,-748231,-748352,-748497,-748553,-748601,-748649,-748724,-748806,-748940,-748974,-749003,-749042,-749058,-749080,-749100,-749122,-749139,-749159,-749175,-749191,-749212,-749230,-749251,-749271,-749295,-749317,-749340,-749363,-749434,-749504,-749689,-749705,-749716,-749724,-749757,-749796,-749808 ); pointsY = Array( -1.05468e+06,-1.05478e+06,-1.05487e+06,-1.05496e+06,-1.05499e+06,-1.05505e+06,-1.05516e+06,-1.05526e+06,-1.05531e+06,-1.05534e+06,-1.05539e+06,-1.05543e+06,-1.05544e+06,-1.05545e+06,-1.05546e+06,-1.05547e+06,-1.05548e+06,-1.05549e+06,-1.05551e+06,-1.05554e+06,-1.05556e+06,-1.05558e+06,-1.05562e+06,-1.05565e+06,-1.0557e+06,-1.05575e+06,-1.05582e+06,-1.0559e+06,-1.05599e+06,-1.05604e+06,-1.05608e+06,-1.05611e+06,-1.05613e+06,-1.05632e+06,-1.05643e+06,-1.05647e+06,-1.05651e+06,-1.05657e+06,-1.05663e+06,-1.05666e+06,-1.05682e+06,-1.05686e+06,-1.0569e+06,-1.05694e+06,-1.05696e+06,-1.05699e+06,-1.05701e+06,-1.05702e+06,-1.05704e+06,-1.05707e+06,-1.05711e+06,-1.05719e+06,-1.05724e+06,-1.05728e+06,-1.05732e+06,-1.05734e+06,-1.05736e+06,-1.05737e+06,-1.05739e+06,-1.05741e+06,-1.05743e+06,-1.05744e+06,-1.05746e+06,-1.05747e+06,-1.05748e+06,-1.0575e+06,-1.05753e+06,-1.05755e+06,-1.05762e+06,-1.05764e+06,-1.05766e+06,-1.05767e+06,-1.05769e+06,-1.05779e+06,-1.05785e+06,-1.05788e+06,-1.05794e+06,-1.058e+06,-1.05811e+06,-1.05822e+06,-1.05828e+06,-1.05832e+06,-1.05835e+06,-1.05841e+06,-1.05847e+06,-1.05858e+06,-1.0586e+06,-1.05863e+06,-1.05866e+06,-1.05867e+06,-1.05869e+06,-1.05871e+06,-1.05872e+06,-1.05874e+06,-1.05876e+06,-1.05877e+06,-1.05878e+06,-1.0588e+06,-1.05882e+06,-1.05883e+06,-1.05885e+06,-1.05887e+06,-1.05889e+06,-1.05891e+06,-1.05893e+06,-1.05899e+06,-1.05904e+06,-1.05918e+06,-1.05917e+06,-1.05915e+06,-1.05914e+06,-1.05911e+06,-1.05906e+06,-1.05904e+06 ); pointsDist = Array( 0,102.448,194.566,291.721,322.989,408.372,509.954,613.407,664.364,695.007,763.895,833.474,862.598,879.816,905.401,931.64,949.033,975.179,1007.08,1031.8,1053.49,1082.05,1118.48,1156.08,1211.93,1275.79,1376.9,1501.39,1615.76,1704.65,1756.08,1802.74,1837,2057.61,2183.55,2227.6,2267.75,2327.65,2390.96,2419.9,2582.31,2616.57,2657.4,2697.07,2724.59,2750.34,2790.72,2825.67,2857.74,2904.64,2942.26,3025.11,3079.28,3118.34,3160.8,3185.22,3204.43,3213.02,3266.19,3317.9,3364.7,3403.33,3435.83,3465.87,3501.02,3547.27,3587.99,3617.61,3688.86,3707.59,3725.23,3740.67,3757.17,3853.02,3917.59,4002.17,4080.92,4169.39,4328.56,4512.55,4589.58,4652.12,4714.66,4808.82,4908.31,5080.44,5122.26,5159.72,5210.57,5231.59,5259.76,5287.08,5315.26,5337.09,5362.87,5385.44,5406.45,5432.41,5457.35,5483.31,5510.55,5543.25,5570.75,5601.18,5633.08,5723.1,5813.8,6043.49,6064.62,6085.38,6096.27,6145.32,6207.17,6226.75 ); DMin = 1000000; i = 0; imin = 0; for (i=0; iD) { DMin=D; imin = i; } } if (event.shiftKey==true) { document.getElementById('to').value = pointsDist[imin]; } else { document.getElementById('from').value = pointsDist[imin]; } }