Mark Allen论心率训练

2013/08/01 12:02 下午 \ 2 Comments \ kelejiabing
Mark Allen是铁三届的传奇人物,曾经6次夺得Kona世界铁人三项赛冠军。
Mark Allen也是MAF的实践者,在《The Big Book of Endurance Training and Racing》(大书)作者Dr Maffentone指导下才登上运动巅峰的。他是如何进行心率训练的?他开始MAF训练时是否也经历过龟速阶段呢?
Dave Scott and Mark Allen Battle it out on the Queen K

锻炼您的心脏-聪明训练的秘密

在15年的铁三生涯里,我一直在寻找各种秘密武器,希望借助它能够提高训练效率,并在比赛中获得理想成绩。这其中,最有效的当属心率训练。它曾是,而且至今还是耐力运动员用来设定训练强度,提高比赛成绩的最有力的工具。当然,还有各式各样的其他方法,比如乳酸测试,体能输出和配速比等等,但它们都有这样或那样的缺点,不如心率训练应用广泛。

在铁人三项中,运动员需要关注三个关键的体能指标,分别是速度、力量和耐力。力量训练相对简单,每周两次在健身房进行全身力量训练即可。通常,铁人三项运动员如果花太多时间在力量训练上,效果反而不太好。这两天关键的训练,将提高你在自行车项目中的输出效率,让你在长跑项目中可以适时加速,在游泳项目中保持高速。

然后是速度训练,这种提供运动员自身原始速度水平的练习需要刻意为之,这个部分也许是最广为人知的训练。通过间歇训练或是专项速度练习,你可以专注于提高每一阶段自己所能达到的最大速度。但和力量一样,速度也是一个相对比较容易训练的部分。速度训练时并不是很痛苦,而且训练时间也不长,每周最多需要15-20分钟的高强度速度训练。

下面将要介绍更加困难的耐力部分,这也是心率训练大展身手的部分。对铁三运动员来说,耐力水平至关重要。而大家为什么会感到耐力很难提高呢?简而言之,耐力训练的难点在于,为了提高有氧效率,你不得不按照比平日里分组训练时要慢的速度来训练;并且要接受心率的主导,而不能任由平日里和同伴一起训练时渴望冠军的那种拼尽全力心态主宰。这意味着无论你是在游泳、骑车还是在跑步时,内心会不断被自我骄傲的那部分不断敲打。但是,每年比赛的结果来看,相对于那些从训练的第一天就拼尽全力的急性子,有耐心的选手能够克制自己按照计划进行训练,一旦打好有氧的基础,他们的速度训练将在一个更高的水平上进行,并且能够长期不断进步,因此他们也会获得比急性子运动员更好的成绩。

那么如何提高耐力训练的效率呢?很简单,使用心率表。

无论你的最终目标是赢得比赛还是保持身体健康,心率表都是最有价值的训练装备。而且,按照下面我将要介绍的方法使用心率表辅助训练,不仅可以帮您成功减掉最后那几斤赘肉,还可以确保你不会不小心在训练中练挂掉,或是在餐桌上还要饥肠辘辘。

我七八十年代开始接受专业的游泳训练时,,当时的训练多是“NO Pain, NO Gain”(译注:国内的讲法是“三从一大”,“从严、从难、从实战出发、大运动量训练”,目前依然是竞技体育的主要训练原则之一。),教练的日常表安排得慢慢的,我们每天都被逼到极限。训练结束回家后我一动也不想动,只想睡觉,准备应付第二天的又一次间歇训练。

我当时并不知道其他的训练方法。因此,上世纪80年代我开始铁人三项的训练时,我的目标就是每次训练都竭尽全力。为了给设定速度目标,我研究了其他优秀的铁三选手在短距离比赛的冲刺阶段能跑多快。像是Dave Scott, Scott Tinley和Scott Molina这些高手,在游泳和自行车项目之后进行的10公里比赛中还能保持每英里5分钟(译注:每公里3分06秒)的速度!

于是我也按这个速度要求自己。每次跑步训练,即使是慢跑,只要是超过一英里我都会尽力按5分钟每英里的配速完成。事实上当时确实见到了一些效果,在头两年我也跑出了几次好成绩。但是,我也受了些不太严重的伤,而且总是觉得很累,没有继续训练的欲望。

然后听说了心率表。一个叫Phil Maffetone的人做了许多有关心率表的研究,他找到我,希望我根据他设计的方案试用一下。他说我无氧训练、速度训练、高心率训练太多。我强迫自己每次都高速奔跑,结果身体只能大量燃烧碳水化合物作为燃料,此时的心率也居高不下。

他叫我来到跑道上,佩戴好心率表,保持心率不超过155次/分钟。Maffetone 告诉我在此心率之下,身体才能够获得足够的氧来尽可能地燃烧脂肪来维持肌肉动作。我开始锻炼自己的有氧供能系统,但开始时我着实吃了一惊。

为了不让心率超过155次/分钟,我的配速降低至每英里8分15秒(译注:每公里5分7秒),比我之前给自己设定的目标慢了3分钟!我的身体几乎不能利用脂肪来供能。

于是,在接下来的4个月,我仅仅进行有氧训练,每次都使用心率表把心率控制在有氧域之中。结束这段训练之后,同样还是按照155次/分钟的强度,我的配速提高了超过1分钟。以此坚持训练一年,训练时不像之前那么痛苦,而且155此/分钟的心率水平下我的配速已经提高到了惊人的每英里5分20秒(译注:每公里3分18秒)。

这意味着我能够高效的燃烧脂肪,并且维持一年前需要190次/分钟的高心率才能达到的速度。我彻底变成了有氧机器。低心率训练的最大好处还在于,我不再害怕下一次跑步会受伤,并且每次训练之后都会感到精力充沛而不是精疲力尽。

现在,让我们了解一下什么心率会带来这种好处和提高。有一个公式可以确定您的最高有氧心率,它是跑步时,您能够燃烧脂肪为肌肉提供主要能量的最高心率;它是每日您都能从训练中恢复的心率;它是帮助您甩掉最后几磅脂肪的最高心率;它是增强心肺功能的关键,当你参加比赛时,就可以进一步提高心率来获取更好的表现。

公式如下:

取180
减去您的年龄
在步骤2得出的数字基础上,进行调整:
如果您从不运动,另减5。
如果您每周运动1-2次,另减2或3。
如果您每周运动3-4次,数值保持不变。
如果您每周运动5-6次,数值保持不变。
如果您每周运动7次以上,已经有一年以上,另加5。
如果您大于55岁或小于25岁,另加5。
如果您大于60岁或小于20岁,另加5。
(译注:此公式与Dr. Maffentone的180MAF最大有氧心率公式略有不同,可以参考如何计算自己的最大有氧心率(MAF心率)对照)

这样就得出了最大有氧心率,按此标准可以最大效率的燃烧脂肪。现在,出门训练吧,记得保持低心率,进行所有的有氧训练,慢慢提高速度。只要几周时间,就可以发现自己在低心率下的速度大幅提高了。

经过一段时间之后,仅做有氧训练所能获得的进步将慢慢达到极限,前几个那种月突飞猛进的速度提升将停止,你再一次慢下来。出现这个信号,说明如果想要继续提高速度的话,就需要辅助以每周1-2次的无氧训练,重新拾起那种“NO Pain, NO Gain”的态度。只不过,这次你的身体完全能够应付这个强度,而且很快你会发现自己的速度再度提高了。不过,从无氧运动中获得的收益也有限,到瓶颈时你需要再次进行有氧训练。

也许,现在很多人正准备进行速度训练。规划间歇训练时,维持高心率的阶段每次练习的总量约在15-30分钟。这就是说在跑道上进行速度训练的话,跑量控制在5公里左右。少于这个量的话收获不大,高于这个量的话很难保持训练质量以获得最佳效果。你当然希望每次训练都能比上一次提高强度,不断进步。如果你发现自己在某一时刻无法继续维持现有的强度,那么应该及时调整或结束训练。要听从自己的身体。

这就是我在接近15年铁人三项生涯中,为了不断提高成绩而所做的一切,这也是我教练方法的基础,我的教练网站为markallenonline.com,自从2001年,Luis Vargas和我帮助百余名铁人三项选手取得了优异成绩。对许多人来说,这肯定是一种具有挑战性的方法,但是回报是巨大的。我诚邀您成为我们的运动员之一。Luis和我将亲自回答您有关该方法的问题和如何克服遇到的困难。赛场上见。

作者:Mark Allen, 6次铁人三项世界冠军

原文链接: http://www.markallenonline.com/maoArticles.aspx?AID=2

uheng初译,译文链接:http://bbs.running8.com/forum.php?mod=viewthread&tid=39110

@kelejiabing 重译,@xmonkeycn 校对。

原创文章,转载请注明: 转载自猎奇爱好者

本文链接地址: Mark Allen论心率训练

文章的脚注信息由WordPress的wp-posturl插件自动生成

随机图片切割

demo http://www.dabaii.com/work/cutImg/index.html

如何把一张图片切割成很多小块?

enter image description here

例如,把右边的图片切成左边的碎块重拍。

基本思路,把图片作为背景background-position属性定位到div中。然后把div随机分布。

需要准备的:

  1. 一个页面容器存放切割后的 碎片。
  2. 原图的高度,宽度
  3. 切割的块数
  4. 图片地址
var cutImgData ={boxName:'.imgbox',imgHieght:'500',imgWidth:'500',particleSize:[4,4],imgUrl:'400m.jpg'};

建立一个切割图片的方法:

function cutImg(){}

把准备好的数据传进去:

function cutImg(cutImgData){}

根据传入进去的数据创建和计算需要的 变量:

  • cutInfo:存放所有背景定位
  • posX: 背景定位X
  • posY: 背景定位Y
  • nx: 取当前碎片 矩阵编号 第二位取模 切割粒度
  • ny: 取当前碎片 矩阵编号 第一位取模 切割粒度
  • square: 返回是否是正方形
  • cutNumber: 分割后碎片数量 = 颗粒大小x*颗粒大小y
  • pieceWidth: 碎片宽度
  • pieceHeight:碎片高度
function cutImg(cutImgData){
  var cutInfo = [],posX,posY,nx,ny,sn;
  var cutNumber = cutImgData.particleSize[0] * cutImgData.particleSize[1];
  var pieceWidth = cutImgData.imgWidth/cutImgData.particleSize[1];
  var pieceHeight = cutImgData.imgHieght/cutImgData.particleSize[0];
  var square = cutImgData.particleSize[0] == cutImgData.particleSize1? true : false;
}

把图片作为背景定位属性background-position分不到div中,div这里采用的绝对定位,所以需要把图片排布成 每行n个,一共n行。 这种排列 使用一个嵌套循环就可以了。


function cutImg(cutImgData){
  var cutInfo = [],posX,posY,nx,ny,sn;
  var cutNumber = cutImgData.particleSize[0] * cutImgData.particleSize[1];
  var pieceWidth = cutImgData.imgWidth/cutImgData.particleSize[1];
  var pieceHeight = cutImgData.imgHieght/cutImgData.particleSize[0];
  var square = cutImgData.particleSize[0] == cutImgData.particleSize1? true : false;

 for(var y=0; y< cutImgData.particleSize[0]; y++){
  for(var x = 0; x< cutImgData.particleSize[1]; x++){
  $(cutImgData.boxName).append('《div class="cutImg'+i+'"》《/div》'); 
  }
 }
}

ps:particleSize 第一位是Y,第二位是X。因为矩阵标识里面 横向x 在第二位 比如说 01 02 03 1,2,3表示的是x轴的。

处理随机重拍阶段:

正方形随机重拍 是从一个0-x自然数的(总格需要切割的个数)数组里面随机返回一个数,并且把重建这个数组,把已经返回的数删除掉。

function onlyRandomNumber(num){
  if(onlyRandomNumber.randomArray ==  undefined || onlyRandomNumber.randomArray.length < 1){ //数组没定义 或者数组 已经被用光了(没刷新页面 调用了重排方法)的时候就新建一个满额数组
   onlyRandomNumber.randomArray =[];
   for(var i= 0; i< num;i++){
    onlyRandomNumber.randomArray[i] = i;
  }
 }
 var ran =parseInt(onlyRandomNumber.randomArray.length*Math.random());
 var randomNum = onlyRandomNumber.randomArray.splice(ran,1);
 return randomNum[0];
}

然后我们在切割方法里面判断是否是正方形:


function cutImg(cutImgData){
  var cutInfo = [],posX,posY,nx,ny,sn;
  var cutNumber = cutImgData.particleSize[0] * cutImgData.particleSize[1];
  var pieceWidth = cutImgData.imgWidth/cutImgData.particleSize[1];
  var pieceHeight = cutImgData.imgHieght/cutImgData.particleSize[0];
  var square = cutImgData.particleSize[0] == cutImgData.particleSize1? true : false;
for(var y=0,i=0; y< cutImgData.particleSize[0]; y++){
  for(var x = 0; x< cutImgData.particleSize[1]; x++){
  //正方形
    if(square){						
    sn = onlyRandomNumber(cutNumber);
    nx = sn%cutImgData.particleSize[1];
    ny = parseInt(sn/cutImgData.particleSize[0]);
    posX = nx*pieceWidth;
    posY = ny*pieceHeight;
    }else{					
   //非正方形切割
    posX = x*pieceWidth;
    posY = y*pieceHeight;						
    sn = i;					
   }
  $(cutImgData.boxName).append('《div class="cutImg'+i+'"》《/div》');
 i++;
  }
 }
}

添加到页面中的div元素写入样式,实现正方形的打乱重拍:


function cutImg(cutImgData){
  var cutInfo = [],posX,posY,nx,ny,sn;
  var cutNumber = cutImgData.particleSize[0] * cutImgData.particleSize[1];
  var pieceWidth = cutImgData.imgWidth/cutImgData.particleSize[1];
  var pieceHeight = cutImgData.imgHieght/cutImgData.particleSize[0];
  var square = cutImgData.particleSize[0] == cutImgData.particleSize1? true : false;
for(var y=0,i=0; y< cutImgData.particleSize[0]; y++){
  for(var x = 0; x< cutImgData.particleSize[1]; x++){
  //正方形
    if(square){						
    sn = onlyRandomNumber(cutNumber);
    nx = sn%cutImgData.particleSize[1];
    ny = parseInt(sn/cutImgData.particleSize[0]);
    posX = nx*pieceWidth;
    posY = ny*pieceHeight;
    }else{					
   //非正方形切割
    posX = x*pieceWidth;
    posY = y*pieceHeight;						
    sn = i;					
   }
  $(cutImgData.boxName).append('《div class="cutImg'+i+'"》《/div》').find('.cutImg'+i).css({"background":"url("+cutImgData.imgUrl+") -"+posX+"px -"+posY+"px no-repeat",
"width":pieceWidth+"px",
"height":pieceHeight+"px",
"position":"absolute",
"left":x*pieceWidth+"px",
"top":y*pieceHeight+"px",
"border":"solid #ccc 1px"
}); 
  i++;
  }
 }
}

实际上,正方形直接使用下面的代码就实现了切割+重排。如果确认自己需要打乱的是正方形,那么工作到此借宿了。


sn = onlyRandomNumber(cutNumber);
nx = sn%cutImgData.particleSize[1];
ny = parseInt(sn/cutImgData.particleSize[0]);/code>

对于长方形,实际上第一次是按顺序排列的,所以需要为非正方形切割提供一个打乱方法:


function randomArray(arr){
var arrBackup = arr.slice(0); 
(function repick(){		
Array.prototype.sort.call(arr,function(a,b){ return Math.random()>.5 ? -1 : 1;})[1];
if(sameArray(arrBackup,arr)){
repick();
}
})()	
return arr;
}

//判断两个数组是否相同
// 判断数组每个位置上的位数 如果有一位不一致立即返回false 因为这里 用的是多维数组
function sameArray(a,b){
var l = a.length;
for(var i=0; i<l; i++){
if(a[i][1] != b[i][1]){
return false;
}
}
return true;
}

长方形在实行完成顺序生成排列以后 再实行一次打乱操作就好了:


function cutImg(cutImgData){
  var cutInfo = [],posX,posY,nx,ny,sn;
  var cutNumber = cutImgData.particleSize[0] * cutImgData.particleSize[1];
  var pieceWidth = cutImgData.imgWidth/cutImgData.particleSize[1];
  var pieceHeight = cutImgData.imgHieght/cutImgData.particleSize[0];
  var square = cutImgData.particleSize[0] == cutImgData.particleSize1? true : false;
for(var y=0,i=0; y< cutImgData.particleSize[0]; y++){
  for(var x = 0; x< cutImgData.particleSize[1]; x++){
  //正方形
    if(square){						
    sn = onlyRandomNumber(cutNumber);
    nx = sn%cutImgData.particleSize[1];
    ny = parseInt(sn/cutImgData.particleSize[0]);
    posX = nx*pieceWidth;
    posY = ny*pieceHeight;
    }else{					
   //非正方形切割
    posX = x*pieceWidth;
    posY = y*pieceHeight;						
    sn = i;					
   }
  $(cutImgData.boxName).append('《div class="cutImg'+i+'"》《/div》').find('.cutImg'+i).css({"background":"url("+cutImgData.imgUrl+") -"+posX+"px -"+posY+"px no-repeat",
"width":pieceWidth+"px",
"height":pieceHeight+"px",
"position":"absolute",
"left":x*pieceWidth+"px",
"top":y*pieceHeight+"px",
"border":"solid #ccc 1px"
}); 
  i++;
  }
 }
if(!square){	
 cutInfo = randomArray(cutInfo);
for(var i = 0; i< cutInfo.length; i++){
 $(cutImgData.boxName).find('.cutImg'+i).css({'background-position':cutInfo[i][1]}).attr('sn',cutInfo[i][0]);					 
  }
 }
}

如果需要记录打乱的顺序做记录,添加返回值:


function cutImg(cutImgData){
  var cutInfo = [],posX,posY,nx,ny,sn;
  var cutNumber = cutImgData.particleSize[0] * cutImgData.particleSize[1];
  var pieceWidth = cutImgData.imgWidth/cutImgData.particleSize[1];
  var pieceHeight = cutImgData.imgHieght/cutImgData.particleSize[0];
  var square = cutImgData.particleSize[0] == cutImgData.particleSize1? true : false;
for(var y=0,i=0; y< cutImgData.particleSize[0]; y++){
  for(var x = 0; x< cutImgData.particleSize[1]; x++){
  //正方形
    if(square){						
    sn = onlyRandomNumber(cutNumber);
    nx = sn%cutImgData.particleSize[1];
    ny = parseInt(sn/cutImgData.particleSize[0]);
    posX = nx*pieceWidth;
    posY = ny*pieceHeight;
    }else{					
   //非正方形切割
    posX = x*pieceWidth;
    posY = y*pieceHeight;						
    sn = i;					
   }
  cutInfo.push([sn,"-"+posX+"px -"+posY+"px"]);
  $(cutImgData.boxName).append('《div class="cutImg'+i+'"》《/div》').find('.cutImg'+i).css({"background":"url("+cutImgData.imgUrl+") -"+posX+"px -"+posY+"px no-repeat",
"width":pieceWidth+"px",
"height":pieceHeight+"px",
"position":"absolute",
"left":x*pieceWidth+"px",
"top":y*pieceHeight+"px",
"border":"solid #ccc 1px"
}); 
  i++;
  }
 }
if(!square){	
 cutInfo = randomArray(cutInfo);
for(var i = 0; i< cutInfo.length; i++){
 $(cutImgData.boxName).find('.cutImg'+i).css({'background-position':cutInfo[i][1]}).attr('sn',cutInfo[i][0]);					 
  }
 }
 return  cutInfo;
}

结束了!
完成代码:



var cutImgData ={boxName:'.imgbox',imgHieght:'500',imgWidth:'500',particleSize:[4,4],imgUrl:'400m.jpg'};
function cutImg(cutImgData){
var cutInfo = [],posX,posY,nx,ny,sn;
var cutNumber = cutImgData.particleSize[0] * cutImgData.particleSize[1];
var pieceWidth = cutImgData.imgWidth/cutImgData.particleSize[1];
var pieceHeight = cutImgData.imgHieght/cutImgData.particleSize[0];
var square = cutImgData.particleSize[0] == cutImgData.particleSize[1]? true : false;		
$(cutImgData.boxName).html(''); 
for(var y=0,i = 0; y< cutImgData.particleSize[0]; y++){
for(var x = 0; x< cutImgData.particleSize[1]; x++){	
//正矩形 直接进行打乱操作 
if(square){						
sn = onlyRandomNumber(cutNumber);
nx = sn%cutImgData.particleSize[1];
ny = parseInt(sn/cutImgData.particleSize[0]);
posX = nx*pieceWidth;
posY = ny*pieceHeight;					
}		
//长矩形 默认第一次按顺序排列		
else{
posX = x*pieceWidth;
posY = y*pieceHeight;						
sn = i;					
}
//数据储存 用户返回给程序储存 和 长矩形进行打乱操作
cutInfo.push([sn,"-"+posX+"px -"+posY+"px"]);	
$(cutImgData.boxName).append('《div class="cutImg'+i+'" sn="'+sn+'"》《/div》').find('.cutImg'+i).css({
"background":"url("+cutImgData.imgUrl+") -"+posX+"px -"+posY+"px no-repeat",
"width":pieceWidth+"px",
"height":pieceHeight+"px",
"position":"absolute",
"left":x*pieceWidth+"px",
"top":y*pieceHeight+"px",
"border":"solid #ccc 1px"
});
i++;
}						
}
//长矩形 进行打乱操作
if(!square){	
cutInfo = randomArray(cutInfo);
for(var i = 0; i< cutInfo.length; i++){ $(cutImgData.boxName).find('.cutImg'+i).css({'background-position':cutInfo[i][1]}).attr('sn',cutInfo[i][0]);					  }					 } return cutInfo; } //随机打乱数组 为了防止数组在很短的情况下 出现打乱后和打乱前结果一样,加入 sameArray方法递归   [长矩形用] function randomArray(arr){ var arrBackup = arr.slice(0);  (function repick(){		 Array.prototype.sort.call(arr,function(a,b){ return Math.random()>.5 ? -1 : 1;})[1];
if(sameArray(arrBackup,arr)){
repick();
}
})()	
return arr;
}

//判断 数组是否相等 a[i][1] 是因为 本身传入的是二维数组
function sameArray(a,b){
var l = a.length;
for(var i=0; i<l; i++){
if(a[i][1] != b[i][1]){
return false;
}
}
return true;
}

//创建一个数组赋值 0-num,随机返回其中一个。 [正矩形用]
function onlyRandomNumber(num){
if(onlyRandomNumber.randomArray ==  undefined || onlyRandomNumber.randomArray.length < 1){ 
onlyRandomNumber.randomArray =[];
for(var i= 0; i< num;i++){
onlyRandomNumber.randomArray[i] = i;
}	
}
var ran =parseInt(onlyRandomNumber.randomArray.length*Math.random());
var randomNum = onlyRandomNumber.randomArray.splice(ran,1);
return randomNum[0];
}
cutImg(cutImgData);

原创文章,转载请注明: 转载自猎奇爱好者

本文链接地址: 随机图片切割

文章的脚注信息由WordPress的wp-posturl插件自动生成