- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM学习7
2010-5-28
对于科比投篮实验的轨迹分析
上次做的科比投篮实验,关于轨迹部分我们直接是按照教程所给的函数来实现的,今天决定来对轨迹函数以及规定的确定做一下分析。
首先先来研究球的运行轨迹是如何确定的。当时我们在假定球的轨迹之前我们用到了一段程序:
Paint_Bmp(0, 0, 320, 240, kobeshot_320240);
while(1)
{
for(ii=0;ii16;ii++)
{
Glib_Line(0,20*ii,320,20*ii,0xffff);
Glib_Line(20*ii,0,20*ii,240,0xffff);
if(ii==5||ii==10||ii==15)
{
Glib_Line(0,20*ii,320,20*ii, (0x0011) | (0x3f5) | (0x00));
Glib_Line(20*ii,0,20*ii,240, (0x0011) | (0x3f5) | (0x00));
}
}
}
这段程序的实验效果是在一张无球的科比投篮图片上划分了许多距离为20像素点的方格子, 方便我们来大概确定篮球走过轨迹的坐标值。
知道效果现在来分析函数。第一个for循环我们可以看出ii的值是由0~15也就是16个值。这时通过想到效果是画距离为20像素点的方格子,我们可以知道整个屏幕长是320个像素点,宽是240个像素点距离,而以20个像素点距离的正方形边长是20像素点,这样在屏幕可以画16x12个这样的方格。这里的16正是for循环里的16次循环。
接着来看下面的两条语句:
Glib_Line(0,20*ii,320,20*ii,0xffff);
Glib_Line(20*ii,0,20*ii,240,0xffff);
go to一下看看函数:
void Glib_Line(int x1,int y1,int x2,int y2,int color)
{
int dx,dy,e;
dx=x2-x1;
dy=y2-y1;
if(dx=0)
{
if(dy = 0) // dy=0
{
if(dx=dy) // 1/8 octant
{
e=dy-dx/2;
while(x1=x2)
{
PutPixel(x1,y1,color);
if(e0){y1+=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 2/8 octant
{
e=dx-dy/2;
while(y1=y2)
{
PutPixel(x1,y1,color);
if(e0){x1+=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy0
{
dy=-dy; // dy=abs(dy)
if(dx=dy) // 8/8 octant
{
e=dy-dx/2;
while(x1=x2)
{
PutPixel(x1,y1,color);
if(e0){y1-=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 7/8 octant
{
e=dx-dy/2;
while(y1=y2)
{
PutPixel(x1,y1,color);
if(e0){x1+=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
else //dx0
{
dx=-dx; //dx=abs(dx)
if(dy = 0) // dy=0
{
if(dx=dy) // 4/8 octant
{
e=dy-dx/2;
while(x1=x2)
{
PutPixel(x1,y1,color);
if(e0){y1+=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 3/8 octant
{
e=dx-dy/2;
while(y1=y2)
{
PutPixel(x1,y1,color);
if(e0){x1-=1;e-=dy;}
文档评论(0)