Welcome to the website navigation,本站只接受合法正规的企业网站,欢迎站长们提交你的网站获得展示和流量有任何问题请联系站长,欢迎大家加入本站。

                
提交网站
  • 网站:76083
  • 待审:5
  • APP:577
  • 文章:304411
  • 会员:56004
文字内链包年1000元 文字内链包年1000元 文字内链包年1000元 AI办公网站 AI绘画工具 AIchat

名站网址导航名站网址导航小编为爱好网页hTML5的朋友提供关于网页hTML5的相关知识。

  • 本篇文章的具体介绍如下

第1页绘制椭圆KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

把现实世界当中的物体模拟到计算机当中,一些简单的物理实验、碰撞旋转等等难度还是不算很大,难度较大的应当算流体模拟。KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

本文将在Canvas当中模拟出一个2D平面内的水珠,涉及的知识点和技巧包括:Jscex基础知识,贝塞尔曲线的绘制,合理利用CanvasRenderingContext2D的translate和rotate等API。KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

绘制椭圆KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

在模拟水滴之前,咱们先思考一下怎么在canvas当中绘制一个椭圆。KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

大家可以很容易想到 下面几种方案:KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

1.根据椭圆笛卡尔坐标系方程绘制KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

2.根据椭圆极坐标方程绘制KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

3.根据椭圆曲率变化绘制KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

4.利用四条贝塞尔曲线绘制KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

第四种,也是性能最好的一种,这样可以避免复杂的计算,充分利用CanvasRenderingContext2D的API(API的性能是通过严格测试,一般情况下比较靠谱).KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

所依咱们采用第四种方式来绘制椭圆。KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var canvas;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ctx;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx = canvas.getContext(“2d”);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.strokeStyle = “#fff”;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

function drawEllipse(x, y, w, h) {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var k = 0.5522848;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ox = (w / 2) * k;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var oy = (h / 2) * k;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var xe = x w;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ye = y h;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var xm = x w / 2;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ym = y h / 2;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.beginPath();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.moveTo(x, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(x, ym – oy, xm – ox, y, xm, y);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xm ox, y, xe, ym – oy, xe, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xe, ym oy, xm ox, ye, xm, ye);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xm – ox, ye, x, ym oy, x, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.stroke();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.clearRect(0,0,canvas.width,canvas.border=”1″ height);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

drawEllipse(10, 10, 40, 82);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

(改变drawEllipse的四个具体参数试试)KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

旋转椭圆KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

这里的旋转不是绕上面的drawEllipse的前两个具体参数x,y旋转,二是绕椭圆的中心旋转。所依仅仅 CanvasRenderingContext2D.rotate是不够的,因为CanvasRenderingContext2D.rotate是绕画 布的左上角(0,0)旋转。所依咱们先要把(0,0)通过CanvasRenderingContext2D.translate到椭圆的中心,然后再 drawEllipse(-a/2, –b/2, a, b).KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

上面这句话,就是绕中心旋转的核心。这里还可以推广到任意图形或者图片(假设有约定的中心)。如图:KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

第2页旋转椭圆KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

然后咱们就可以先绘制一个鸟巢出来:KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

html>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

head>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

script src=”http://files.cnblogs.com/iamzhanglei/jscex.jscexRequire.min.js” type=”text/javascript”>script>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

head>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

body>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

style type=”text/css”>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

input.css3btnKJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

background: -moz-linear-gradient(270deg, #d2ebf8, #0c8ab5);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

background: -webkit-linear-gradient(top, #d2ebf8, #0c8ab5);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

background: -o-linear-gradient(top, #d2ebf8, #0c8ab5);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=”#000099CC”, EndColorStr=”#FF0087B4″);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

border-top: 1px solid #38538c;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

border-right: 1px solid #1f2d4d;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

border-bottom: 1px solid #151e33;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

border-left: 1px solid #1f2d4d;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

border-radius: 4px;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

box-shadow: inset 0 1px 10px 1px #5c8bee, 0px 1px 0 #1d2c4d, 0 2px 0px #1f3053, 0 4px 4px 1px #111111;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

color: #f0f0f0;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

font: bold 20px “helvetica neue” , helvetica, arial, sans-serif;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

padding: 10px 0 10px 0;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

text-align: center;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

text-shadow: 0px -1px 1px #1e2d4d;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

width: 150px;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

background-clip: padding-box;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

input.css3btn:hoverKJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

box-shadow: inset 0 0px 20px 1px #87adff, 0px 1px 0 #1d2c4d, 0 3px 0px #1f3053, 0 4px 4px 1px #111111;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

cursor: pointer;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

input.css3btn:activeKJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

box-shadow: inset 0 1px 10px 1px #5c8bee, 0 1px 0 #1d2c4d, 0 2px 0 #1f3053, 0 4px 3px 0 #111111;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

style>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

canvas width=”350″ border=”1″ height=”350″ style=”border: solid 15px #222; background-color: #111;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

color: #CCC;”>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

Your browser does not support the canvas element.KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

canvas>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

script>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var canvas;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ctx;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var px = 0;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var py = 0;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

function init() {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx = canvas.getContext(“2d”);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.strokeStyle = “#fff”;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.translate(70, 70);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

init();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var i = 0;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

function drawEllipse(x, y, w, h) {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var k = 0.5522848;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ox = (w / 2) * k;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var oy = (h / 2) * k;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var xe = x w;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ye = y h;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var xm = x w / 2;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ym = y h / 2;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.beginPath();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.moveTo(x, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(x, ym – oy, xm – ox, y, xm, y);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xm ox, y, xe, ym – oy, xe, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xe, ym oy, xm ox, ye, xm, ye);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xm – ox, ye, x, ym oy, x, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.stroke();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.translate(x 70, y 100);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

px = -70;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

py = -100;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.rotate(10 * Math.PI * 2 / 360);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ct;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var drawAsync = eval(Jscex.compile(“async”, function (ct) {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

while (true) {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

drawEllipse(px, py, 140, 200)KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

$await(Jscex.Async.sleep(200, ct));KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

}))KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

function Button1_onclick() {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ct.cancel();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

function Button2_onclick() {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ct = new Jscex.Async.CancellationToken();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

drawAsync(ct).start();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

script>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

br />KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

input type=”button” value=”run” onclick=”return Button2_onclick()” />KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

input type=”button” value=”stop” onclick=”return Button1_onclick()” />KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

body>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

html>KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

第3页绘制水滴KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

 KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

绘制水滴KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

旋转的椭圆和鸟巢神马的和水滴有什么关系呢?KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

咱们通过改变椭圆的长轴和短轴,令其非常接近圆形(只能接近,不能等于圆形),然后每次旋转擦除画布,就可以达您预想不到的具体效果!KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

这里需要注意的是,擦除画布不再是一句 CanvasRenderingContext2D.clearRect(0,0,canvas.width,canvas.border=”1″ height)就可以,因为画布已经旋转和画布原点已经translate,所依咱们使用 ctx.clearRect(-canvas.width, -canvas.border=”1″ height, 2 * canvas.width, 2 * canvas.border=”1″ height)来擦除画布。KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

咱们画一个长轴42,短轴40的椭圆,旋转并擦除画布:KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

function drawEllipse(x, y, w, h) {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.clearRect(-canvas.width, -canvas.border=”1″ height, 2 * canvas.width, 2 * canvas.border=”1″ height);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var k = 0.5522848;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ox = (w / 2) * k;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var oy = (h / 2) * k;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var xe = x w;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ye = y h;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var xm = x w / 2;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ym = y h / 2;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.beginPath();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.moveTo(x, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(x, ym – oy, xm – ox, y, xm, y);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xm ox, y, xe, ym – oy, xe, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xe, ym oy, xm ox, ye, xm, ye);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.bezierCurveTo(xm – ox, ye, x, ym oy, x, ym);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.stroke();KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.translate(x 20, y 21);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

px = -20;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

py = -21;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

ctx.rotate(10 * Math.PI * 2 / 360);KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var ct;KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

var drawAsync = eval(Jscex.compile(“async”, function (ct) {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

while (true) {KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

drawEllipse(px, py, 40, 42)KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

$await(Jscex.Async.sleep(10, ct));KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

}))KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

会是什么具体效果呢?KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

在线演示具体效果查看KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

http://www.cnblogs.com/iamzhanglei/archive/2011/12/12/2284188.htmlKJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

现在大家可以看到一个晃动的水珠了KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

网页hTML5教程移动应用开发建设第1章:用网页hTML5教程、地理定位API和Web服务来开发建设KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

常用缩略语KJKAIChat_企业网址导航_网址分类目录_企业黄页网址提交查询专业网站!

关于网页hTML5的相关知识就说到这里希望可以帮助朋友们。,

标签:

分享到:

  admin

注册时间:

网站:0 个   APP:3 个  文章:0 篇

  • 76083

    网站

  • 577

    APP

  • 304411

    文章

  • 56004

    会员

赶快注册账号,推广您的网站吧!
文章分类
热门网站
最新入驻APP小程序

宝贝市场2023-02-08

宝贝市场——买手和卖家商品展示

夺宝助手2023-02-08

夺宝助手小程序,查看每日快夺宝平

查诚信2023-02-08

查诚信是一款免费的商业查询工具

车价天天报2023-02-08

快速连接汽车销售,获知汽车最新报

考勤助理小程序2023-02-08

上班签到考勤,实时定位,后台轻松

汽车报价大全查询2023-02-08

汽车报价大全查询提供最新汽车市