2014年10月17日星期五

HTML5_画布_太阳系 - 孔东阳

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
HTML5_画布_太阳系 - 孔东阳  阅读原文»

HTML5_画布_太阳系


一、canvas属性和方法的简单介绍
①对于不支持canvas标签的浏览器需要显示"不支持canvas"
使用IE11浏览器的开发人员工具,仿真:文档模式=8,
显示:IE8不支持canvas


默认的画布背景是白色的,可以给它加一个背景样式


\App3_HTML5\Module2_Canvas\canvas-1.html

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<canvas width="500px" height="400px" style="background: yellow">
您的浏览器不支持canvas!
</canvas>
</body>
</html>

②canvas的API
canvas主要属性和方法

save()      保存当前环境的状态
restore()    返回之前保存过的路径状态和属性
createEvent()
getContext()  返回一个对象,指出访问绘图功能必要的API
toDataURL()  返回canvas图像的URL

属性

fillStyle      填充绘画的颜色、渐变、模式
strokeStyle    笔触的颜色、渐变、模式
shadowColor   阴影颜色
shadowBlur    阴影模糊级别
shadowOffsetX  阴影水平偏移
shadowOffsetY  阴影垂直偏移

方法

createLinearGradient()   创建线性渐变(用在画布内容上)
createPattern()      在指定的方向上重复指定的元素
createRadialGradient()   创建放射状/环形的渐变(用在画布内容上
addColorStop()      规定渐变对象中的颜色和停止位置

线条样式属性和方法

lineCap     线条的结束端点样式
lineJoin     两线相交时,所创建的拐角类型
lineWidth    线条宽度
miterLimit   最大斜接长度

矩形方法

rect()      创建矩形
fillRect()     绘制"被填充"的矩形
strockRect()   绘制矩形(无填充)
clearRect()   在给定矩形内清除指定像素

路径方法

fill()           填充当前绘图
stroke()         绘制已定义的路径
beginPath()       起始一条路径或重置当前路径
moveTo()       把路径移动到话不指定点,不创建线条
closePath()       创建从当前点回到起始点的线条
lineTo()         创建一个新点,创建该点到指定点的线条
clip()          从原始画布剪切任意形状和尺寸的区域
quadraticCurveTo()   创建二次方贝塞尔曲线
bezierCurveTo()     创建三次方贝塞尔曲线
arc()         创建弧(用于创建圆形或部分圆)
arcTo()         创建两切线之间的弧
isPointPath()     如果指定的点在当前的路径上返回真值

转换方法10.17 校内模拟赛(火炬torch、硬币游戏xoinc、过路费toll|USACO) - KingNight  阅读原文»

题目及数据:http://pan.baidu.com/s/1bn0DEUF

T1:火炬torch

由于N*M得到的数只由0、1两种数组成,不难想到用二进制来模拟N*M,数据太弱就A了。。

T2:硬币游戏xoinc

典型的博弈dp。记dp(x,y)表示还剩下x个可以选,对手上一轮选了y个。那么你的状态即是dp[x-k][k](1<=min(2y,x) )

则为满足两人都按最优方案决策,则由dp[x][y]=max{sum[x]-dp[x-k][k]};不难发现,这个dp是 2d/1d的,显然不能满足2000的数据量

进一步,dp[x][y]=sum[x]-dp[x-k][k] , 1<=k<=min(2y,x) dp[x][y-1]=sum[x]-dp[x-k][k],1<=k<=min(2y-2,x)

不难发现前者只比后者多了两种状态,也就是意味着这个dp可以优化成2d/0d

于是 dp[x][y]=max(dp[x][y-1],max(sum[x]-dp[x-2y][2y],sum[x]-dp[x-2y+1][2y-1]));

T3:过路费toll

比较好的最短路径的题。 由于每次松弛时,附带的最大点费用不是始终确定的,所以一般的直接最短路算法是不能胜任的。

由于N<=250,且是多源最短路径,考虑Floyd。

由于floyd的枚举媒介节点k的性质,可以将k节点按点费用从大到小排序,那么floyd恰好完全正确。

1 #include<set>
2 #include<map>
3 #include<queue>
4 #include<cmath>
5 #include<cstdio>
6 #include<cstdlib>
7 #include<cstring>
8 #include<iostream>
9 #include<algorithm>
10 using namespace std;
11 const int N = 100010;
12 #define For(i,n) for(int i=1;i<=n;i++)
13 #define Rep(i,l,r) for(int i=l;i<=r;i++)
14
15 int j,t,n,A[N];
16 long long s;
17
18 int main(){
19 freopen("torch.in","r",stdin);
20 freopen("torch.out","w",stdout);
21 scanf("%d",&n);
22 For(i,N*2){
23 t=i;s=0;
24 while(t){
25 A[++A[0]]=t%2;
26 t/=2;
27 }
28 while(A[0]>0) s=s*10+A[A[0]--];
29 if(s%n) continue;
30 else {
31 cout<<s/n<<endl;
32 return 0;
33 }
34 }
35 puts("No Solution");
36 return 0;
37 }
1 #include<set>
2 #include<map>
3 #include<queue>
4 #include<cmath>
5 #include<cstdio>
6 #include<cstdlib>
7 #include<cstring>
8 #include<iostream>
9 #include<algorithm>
10 using namespace std;
11 const int N = 2010;
12 #define For(i,n) for(int i=1;i<=n;i++)
13 #define Rep(i,l,r) for(int i=l;i<=r;i++)
14
15 int sum[N],A[N],opt[N][N],n;
16
17 void init(){
18 scanf("%d",&n);
19 For(i,n) scanf("%d",&A[n-i+1]);
20 For(i,n) sum=sum+A;
阅读更多内容

没有评论:

发表评论