bigengineer.js - 金海龙HTML5 Canvas 作图函数库 2012版
2012-08-13 15:05
429 查看
/*
名称:金海龙HTML5
Canvas 作图函数库 2012版
版本:2.0
作者:金海龙(高级软件工程师)
博客:http://htmlcanvas.webgarden.com
Google搜索:HTML
Canvas 金海龙
类型:Web应用/绘图/源代码
开发平台:WinXP+Google浏览器
功能:为个人开发者提供简单的作图函数,
凡是支持HTML5的浏览器,都能使用这些函数。
*/
function ABLen(A,B)
{
//功能:计算A、B两点之间的距离。
var i;
i=Math.pow((B[0]-A[0]),2)+Math.pow((B[1]-A[1]),2);
i=Math.floor(Math.sqrt(i));
return i;
}
function DrawP(Canvas,P)
{
//在点P处画一个点
with (Canvas)
{
moveTo(P[0],P[1]);
lineTo(P[0]+1,P[1]+1);
}
}
function DrawLine(Canvas,A,B)
{
//画一条线段,“A、B”是这条线段的端点
with (Canvas)
{
moveTo(A[0],A[1]);
lineTo(B[0],B[1]);
}
}
function GetSmallest(A,B)
{
var i,co,i1,i2;
var R=new Array(2);
//返回P中X最小和Y最小的数,然后组成新的点返回
R[0]=A[0];
R[1]=A[1];
if (B[0]<R[0])
{
i1=B[0];
}
else
{
i1=R[0];
}
if (B[1]<R[1])
{
i2=B[1];
}
else
{
i2=R[1];
}
R[0]=i1;
R[1]=i2;
return(R);
}
function GetBiggest(A,B)
{
var i,co,i1,i2;
var R=new Array(2);
//返回P中X最小和Y最小的数,然后组成新的点返回
R[0]=A[0];
R[1]=A[1];
if (B[0]>R[0])
{
i1=B[0];
}
else
{
i1=R[0];
}
if (B[1]>R[1])
{
i2=B[1];
}
else
{
i2=R[1];
}
R[0]=i1;
R[1]=i2;
return(R);
}
function DrawRect(Canvas,A,C)
{
//画个矩形,“A、C”是对顶点
var p1,p2=new Array(2);
p1=GetSmallest(A,C);
p2=GetBiggest(A,C);
with (Canvas)
{
rect(p1[0],p1[1],p2[0]-p1[0],p2[1]-p1[1]);
}
}
function DrawTriangle(Canvas,A,B,C)
{
//画个三角形,“A、B、C”是顶点
with (Canvas)
{
moveTo(A[0],A[1]);
lineTo(B[0],B[1]);
lineTo(C[0],C[1]);
lineTo(A[0],A[1]);
}
}
function DrawAOB(Canvas,A,O,B)
{
//画个角,“O”是顶点,OA、OB是两条边
with (Canvas)
{
moveTo(A[0],A[1]);
lineTo(O[0],O[1]);
lineTo(B[0],B[1]);
}
}
function DrawRoundRect(Canvas,P1,P2,Radius)
{
//画个圆角矩形
var A=new Array(Math.min(P1[0],P2[0]),Math.min(P1[1],P2[1]));
var C=new Array(Math.max(P1[0],P2[0]),Math.max(P1[1],P2[1]));
var B=new Array(A[0],C[1]);
var D=new Array(C[0],A[1]);
Canvas.beginPath();
var P=new Array(A[0],A[1]+Radius);
DrawArcTo(Canvas,P,B,C,Radius);
var P=new Array(B[0]+Radius,B[1]);
DrawArcTo(Canvas,P,C,D,Radius);
var P=new Array(C[0],C[1]-Radius);
DrawArcTo(Canvas,P,D,A,Radius);
var P=new Array(D[0]-Radius,D[1]);
DrawArcTo(Canvas,P,A,B,Radius);
Canvas.stroke();
/*
Canvas.beginPath();
DrawAOBArc(Canvas,C,D,A,Radius);
Canvas.stroke();
Canvas.beginPath();
DrawAOBArc(Canvas,D,A,B,Radius);
Canvas.stroke();
Canvas.endPath();
*/
}
function DrawAOBArc(Canvas,A,O,B,Radius)
{
//画圆角
/* example:
var A=new Array(50,50);
var O=new Array(50,150);
var B=new Array(100,150);
hb.translate(30, 0);
hb.beginPath();
hb.strokestyle="#000000";
DrawAOBArc(hb,A,O,B,20);
hb.stroke();
*/
with (Canvas)
{
moveTo(A[0],A[1]);
arcTo(O[0],O[1],B[0],B[1],Radius);
lineTo(B[0],B[1]);
}
}
function DrawQuadraticCurveTo(Canvas,A,O,B)
{
//画二次样条曲线路径,A:起点;B:终点;O:控制点
with (Canvas)
{
moveTo(A[0],A[1]);
bezierCurveTo(O[0],O[1],B[0],B[1]);
}
}
function DrawbezierCurveTo(Canvas,A,O1,O2,B)
{
//画贝塞尔曲线路径,O1和O2是控制点
with (Canvas)
{
moveTo(A[0],A[1]);
bezierCurveTo(O1[0],O1[1],O2[0],O2[1],B[0],B[1]);
}
}
function DrawArcTo(Canvas,A,O,B,Radius)
{
//画段弧线
with (Canvas)
{
moveTo(A[0],A[1]);
arcTo(O[0],O[1],B[0],B[1],Radius);
}
}
function DrawArc(Canvas,O,Radius,startAngle, endAngle, anticlockwise)
{
//画段弧线,startAngle:起始角度; endAngle:终止角度
//Example: DrawArc(hb,B,50,0,-90,true);//逆时针画弧线
//Example: DrawArc(hb,B,50,0,-90,false);//顺时针画弧线
with (Canvas)
{
arc(O[0],O[1],Radius,startAngle*Math.PI/180,
endAngle*Math.PI/180,
anticlockwise);
}
}
function DrawCircle(Canvas,O,Radius)
{
//画圆,例子:var B=new Array(150,150); DrawCircle(hb,B,50);
with (Canvas)
{
var x=O[0]+Radius;
var y=O[1];
moveTo(x,y);
for (var i=0;i<=360;i++)
{
var ii=i*Math.PI/180;
x=O[0]+Radius*Math.cos(ii);
y=O[1]-Radius*Math.sin(ii);
lineTo(x,y);
}//over for
}//over with
}//finished!
function DrawEllipse(Canvas,O,OA,OB)
{
//画椭圆,例子:var B=new Array(150,150); DrawEllipse(hb,B,50,30);
with (Canvas)
{
var x=O[0]+OA;
var y=O[1];
moveTo(x,y);
for (var i=0;i<=360;i++)
{
var ii=i*Math.PI/180;
var x=O[0]+OA*Math.cos(ii);
var y=O[1]-OB*Math.sin(ii);
lineTo(x,y);
}
}
}
function DrawPolyline(Canvas,P)
{
//绘制不闭合的线,P的长度必须是偶数
/*
var P=new Array(12);
P[0]=10;
P[1]=30;
P[2]=10;
P[3]=80;
P[4]=40;
P[5]=110;
P[6]=80;
P[7]=80;
P[8]=80;
P[9]=30;
P[10]=55;
P[11]=10;
hb.beginPath();
DrawPolyline(hb,P);
hb.stroke();
hb.endPath();
*/
var co=P.length;
var i=0;
while (i<co)
{
Canvas.moveTo(P[i],P[i+1]);
Canvas.lineTo(P[i+2],P[i+3]);
i=i+2;
}
}
function DrawPolygon(Canvas,P)
{
//画闭合的多边形
/* example :
var P=new Array(12);
P[0]=10;
P[1]=30;
P[2]=10;
P[3]=80;
P[4]=40;
P[5]=110;
P[6]=80;
P[7]=80;
P[8]=80;
P[9]=30;
P[10]=55;
P[11]=10;
hb.beginPath();
DrawPolygon(hb,P);
hb.stroke();
hb.endPath();
*/
var co=P.length-1;
DrawPolyline(Canvas,P)
Canvas.moveTo(P[0],P[1]);
Canvas.lineTo(P[co-1],P[co]);
}
本文节选自我金海龙2010年写的《 HTML5
Canvas 作图函数库2.0版本.pdf 》,
在HTML5刚登陆中国大陆的时候,奇缺权威资料,我及时写作,刚一发布,就引起了关注,也成为被盗版的目标,当你们在Google搜索:HTML5
作图 就可以看到我金海龙作品的排名。
这正说明了我的编程实力。
再接再厉,做完一个版本、开发完一次,才能觉得不完美。
我最近正在写作《HTML
5 Canvas应用开发者指南》,写完一章节,就发布在我金海龙的个人主页上,
在我个人博客上只发表其中一些部分段落,写写感想,或者其它的,只要我有时间的话。
名称:金海龙HTML5
Canvas 作图函数库 2012版
版本:2.0
作者:金海龙(高级软件工程师)
博客:http://htmlcanvas.webgarden.com
Google搜索:HTML
Canvas 金海龙
类型:Web应用/绘图/源代码
开发平台:WinXP+Google浏览器
功能:为个人开发者提供简单的作图函数,
凡是支持HTML5的浏览器,都能使用这些函数。
*/
function ABLen(A,B)
{
//功能:计算A、B两点之间的距离。
var i;
i=Math.pow((B[0]-A[0]),2)+Math.pow((B[1]-A[1]),2);
i=Math.floor(Math.sqrt(i));
return i;
}
function DrawP(Canvas,P)
{
//在点P处画一个点
with (Canvas)
{
moveTo(P[0],P[1]);
lineTo(P[0]+1,P[1]+1);
}
}
function DrawLine(Canvas,A,B)
{
//画一条线段,“A、B”是这条线段的端点
with (Canvas)
{
moveTo(A[0],A[1]);
lineTo(B[0],B[1]);
}
}
function GetSmallest(A,B)
{
var i,co,i1,i2;
var R=new Array(2);
//返回P中X最小和Y最小的数,然后组成新的点返回
R[0]=A[0];
R[1]=A[1];
if (B[0]<R[0])
{
i1=B[0];
}
else
{
i1=R[0];
}
if (B[1]<R[1])
{
i2=B[1];
}
else
{
i2=R[1];
}
R[0]=i1;
R[1]=i2;
return(R);
}
function GetBiggest(A,B)
{
var i,co,i1,i2;
var R=new Array(2);
//返回P中X最小和Y最小的数,然后组成新的点返回
R[0]=A[0];
R[1]=A[1];
if (B[0]>R[0])
{
i1=B[0];
}
else
{
i1=R[0];
}
if (B[1]>R[1])
{
i2=B[1];
}
else
{
i2=R[1];
}
R[0]=i1;
R[1]=i2;
return(R);
}
function DrawRect(Canvas,A,C)
{
//画个矩形,“A、C”是对顶点
var p1,p2=new Array(2);
p1=GetSmallest(A,C);
p2=GetBiggest(A,C);
with (Canvas)
{
rect(p1[0],p1[1],p2[0]-p1[0],p2[1]-p1[1]);
}
}
function DrawTriangle(Canvas,A,B,C)
{
//画个三角形,“A、B、C”是顶点
with (Canvas)
{
moveTo(A[0],A[1]);
lineTo(B[0],B[1]);
lineTo(C[0],C[1]);
lineTo(A[0],A[1]);
}
}
function DrawAOB(Canvas,A,O,B)
{
//画个角,“O”是顶点,OA、OB是两条边
with (Canvas)
{
moveTo(A[0],A[1]);
lineTo(O[0],O[1]);
lineTo(B[0],B[1]);
}
}
function DrawRoundRect(Canvas,P1,P2,Radius)
{
//画个圆角矩形
var A=new Array(Math.min(P1[0],P2[0]),Math.min(P1[1],P2[1]));
var C=new Array(Math.max(P1[0],P2[0]),Math.max(P1[1],P2[1]));
var B=new Array(A[0],C[1]);
var D=new Array(C[0],A[1]);
Canvas.beginPath();
var P=new Array(A[0],A[1]+Radius);
DrawArcTo(Canvas,P,B,C,Radius);
var P=new Array(B[0]+Radius,B[1]);
DrawArcTo(Canvas,P,C,D,Radius);
var P=new Array(C[0],C[1]-Radius);
DrawArcTo(Canvas,P,D,A,Radius);
var P=new Array(D[0]-Radius,D[1]);
DrawArcTo(Canvas,P,A,B,Radius);
Canvas.stroke();
/*
Canvas.beginPath();
DrawAOBArc(Canvas,C,D,A,Radius);
Canvas.stroke();
Canvas.beginPath();
DrawAOBArc(Canvas,D,A,B,Radius);
Canvas.stroke();
Canvas.endPath();
*/
}
function DrawAOBArc(Canvas,A,O,B,Radius)
{
//画圆角
/* example:
var A=new Array(50,50);
var O=new Array(50,150);
var B=new Array(100,150);
hb.translate(30, 0);
hb.beginPath();
hb.strokestyle="#000000";
DrawAOBArc(hb,A,O,B,20);
hb.stroke();
*/
with (Canvas)
{
moveTo(A[0],A[1]);
arcTo(O[0],O[1],B[0],B[1],Radius);
lineTo(B[0],B[1]);
}
}
function DrawQuadraticCurveTo(Canvas,A,O,B)
{
//画二次样条曲线路径,A:起点;B:终点;O:控制点
with (Canvas)
{
moveTo(A[0],A[1]);
bezierCurveTo(O[0],O[1],B[0],B[1]);
}
}
function DrawbezierCurveTo(Canvas,A,O1,O2,B)
{
//画贝塞尔曲线路径,O1和O2是控制点
with (Canvas)
{
moveTo(A[0],A[1]);
bezierCurveTo(O1[0],O1[1],O2[0],O2[1],B[0],B[1]);
}
}
function DrawArcTo(Canvas,A,O,B,Radius)
{
//画段弧线
with (Canvas)
{
moveTo(A[0],A[1]);
arcTo(O[0],O[1],B[0],B[1],Radius);
}
}
function DrawArc(Canvas,O,Radius,startAngle, endAngle, anticlockwise)
{
//画段弧线,startAngle:起始角度; endAngle:终止角度
//Example: DrawArc(hb,B,50,0,-90,true);//逆时针画弧线
//Example: DrawArc(hb,B,50,0,-90,false);//顺时针画弧线
with (Canvas)
{
arc(O[0],O[1],Radius,startAngle*Math.PI/180,
endAngle*Math.PI/180,
anticlockwise);
}
}
function DrawCircle(Canvas,O,Radius)
{
//画圆,例子:var B=new Array(150,150); DrawCircle(hb,B,50);
with (Canvas)
{
var x=O[0]+Radius;
var y=O[1];
moveTo(x,y);
for (var i=0;i<=360;i++)
{
var ii=i*Math.PI/180;
x=O[0]+Radius*Math.cos(ii);
y=O[1]-Radius*Math.sin(ii);
lineTo(x,y);
}//over for
}//over with
}//finished!
function DrawEllipse(Canvas,O,OA,OB)
{
//画椭圆,例子:var B=new Array(150,150); DrawEllipse(hb,B,50,30);
with (Canvas)
{
var x=O[0]+OA;
var y=O[1];
moveTo(x,y);
for (var i=0;i<=360;i++)
{
var ii=i*Math.PI/180;
var x=O[0]+OA*Math.cos(ii);
var y=O[1]-OB*Math.sin(ii);
lineTo(x,y);
}
}
}
function DrawPolyline(Canvas,P)
{
//绘制不闭合的线,P的长度必须是偶数
/*
var P=new Array(12);
P[0]=10;
P[1]=30;
P[2]=10;
P[3]=80;
P[4]=40;
P[5]=110;
P[6]=80;
P[7]=80;
P[8]=80;
P[9]=30;
P[10]=55;
P[11]=10;
hb.beginPath();
DrawPolyline(hb,P);
hb.stroke();
hb.endPath();
*/
var co=P.length;
var i=0;
while (i<co)
{
Canvas.moveTo(P[i],P[i+1]);
Canvas.lineTo(P[i+2],P[i+3]);
i=i+2;
}
}
function DrawPolygon(Canvas,P)
{
//画闭合的多边形
/* example :
var P=new Array(12);
P[0]=10;
P[1]=30;
P[2]=10;
P[3]=80;
P[4]=40;
P[5]=110;
P[6]=80;
P[7]=80;
P[8]=80;
P[9]=30;
P[10]=55;
P[11]=10;
hb.beginPath();
DrawPolygon(hb,P);
hb.stroke();
hb.endPath();
*/
var co=P.length-1;
DrawPolyline(Canvas,P)
Canvas.moveTo(P[0],P[1]);
Canvas.lineTo(P[co-1],P[co]);
}
本文节选自我金海龙2010年写的《 HTML5
Canvas 作图函数库2.0版本.pdf 》,
在HTML5刚登陆中国大陆的时候,奇缺权威资料,我及时写作,刚一发布,就引起了关注,也成为被盗版的目标,当你们在Google搜索:HTML5
作图 就可以看到我金海龙作品的排名。
这正说明了我的编程实力。
再接再厉,做完一个版本、开发完一次,才能觉得不完美。
我最近正在写作《HTML
5 Canvas应用开发者指南》,写完一章节,就发布在我金海龙的个人主页上,
在我个人博客上只发表其中一些部分段落,写写感想,或者其它的,只要我有时间的话。
相关文章推荐
- bigengineer.js - 金海龙HTML5 Canvas 作图函数库 2012版
- 金海龙HTML5 Canvas 作图函数库 2012版.docx
- [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)
- JS&HTML5 Canvas结合封装的JCanvas库——最新动态
- html5学习canvas基本使用:div在js前面;localStorage存储根据浏览器在不同的位置;应用程序缓存;placeholder 属性提供一种提示(hint),描述输入域所期待的值。
- [js高手之路] html5 canvas教程 - 绘制七巧板
- 一个JS动画框架-基于HTML5::Canvas
- js基于html5中canvas的字模提取工具(附js生成声音的方式、获取系统支持字体方式、字模显示及其他)
- html5 canvas+js实现ps钢笔抠图
- 纯JS+html5新标签canvas绘制与本地时间同步时针
- [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API
- [js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解
- HTML5里面的东西:Canvas KineticJS规模动画教程!
- HTML5 五子棋 - JS/Canvas 游戏
- js+html5绘制图片到canvas的方法
- [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)
- 推荐的html5知识:Canvas KineticJS图片教程!
- [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)
- [js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)
- js+html5实现canvas绘制椭圆形图案的方法