【Canvas与艺术】双“方齿齿轮”啮合示意图

2024-03-30 03:36

本文主要是介绍【Canvas与艺术】双“方齿齿轮”啮合示意图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【关键点】

齿轮数组的建立、旋转角度的调整。

【图例】

【代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head><title>双“方齿齿轮”啮合示意图</title><style type="text/css">.centerlize{margin:0 auto;width:1200px;}</style></head><body οnlοad="init();"><div class="centerlize"><canvas id="myCanvas" width="512px" height="512px" style="border:1px dotted black;">如果看到这段文字说您的浏览器尚不支持HTML5 Canvas,请更换浏览器再试.</canvas></div></body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码(从<!DOCTYPE到script>)拷贝下来,粘贴到文本编辑器中,
* 另存为.html文件,再用chrome浏览器打开,就能看到实现效果。
******************************************************************/// canvas的绘图环境
var ctx;// 边长
const WIDTH=1000;
const HEIGHT=500;// 舞台对象
var stage;//-------------------------------
// 初始化
//-------------------------------
function init(){// 获得canvas对象var canvas=document.getElementById('myCanvas');  canvas.width=WIDTH;canvas.height=HEIGHT;// 初始化canvas的绘图环境ctx=canvas.getContext('2d');  ctx.translate(WIDTH/2,HEIGHT/2);// 原点平移到画布中央// 准备stage=new Stage();    stage.init();// 开幕animate();
}// 播放动画
function animate(){    stage.update();    stage.paintBg(ctx);stage.paintFg(ctx);     // 循环if(true){window.requestAnimationFrame(animate);   }
}// 舞台类
function Stage(){// 转角this.angle=0;// 准备齿轮数组this.gearArr=[];// 初始化this.init=function(){for(var i=0;i<36;i++){var theta=Math.PI/18*i-Math.PI/36;var x1=150*Math.cos(theta);var y1=150*Math.sin(theta);var x2=140*Math.cos(theta);var y2=140*Math.sin(theta);if(i%2==0){this.gearArr.push({x:x1,y:y1});this.gearArr.push({x:x2,y:y2});}else{                this.gearArr.push({x:x2,y:y2});this.gearArr.push({x:x1,y:y1});}}}// 更新this.update=function(){this.angle+=Math.PI/180;}// 画背景this.paintBg=function(ctx){ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏        }// 画前景this.paintFg=function(ctx){// 画黄齿轮ctx.save();        ctx.translate(-150,0);ctx.rotate(-this.angle);ctx.beginPath();for(var i=0;i<this.gearArr.length;i++){ctx.lineTo(this.gearArr[i].x,this.gearArr[i].y);}ctx.closePath();ctx.fillStyle="yellow";ctx.fill();ctx.font="30px consolas";ctx.textAlign="center";ctx.textBaseLine="Middle";ctx.fillStyle="white";ctx.fillText("逆火原创",0,0);ctx.restore();// 画紫齿轮ctx.save();ctx.translate(140,0);ctx.rotate(this.angle+Math.PI/18);ctx.beginPath();for(var i=0;i<this.gearArr.length;i++){ctx.lineTo(this.gearArr[i].x,this.gearArr[i].y);}ctx.closePath();ctx.fillStyle="purple";ctx.fill();ctx.font="30px Arial";ctx.textAlign="center";ctx.textBaseLine="Middle";ctx.fillStyle="white";ctx.fillText("逆火原创",0,0);ctx.restore();}
}/*---------------------------------------------
风雪压我两三年,我笑风轻雪如棉。
----------------------------------------------*/
//-->
</script>

END

这篇关于【Canvas与艺术】双“方齿齿轮”啮合示意图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860378

相关文章

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

[情商-13]:语言的艺术:何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相!

目录 前言: 一、说话的真实程度分级 二、说谎动机分级:善意谎言、中性谎言、恶意谎言 三、小心:所谓真相:只说对自己有利的真相 四、小心:所谓真相:就是别人想让你知道的真相 五、小心:所谓善解人意:就是别人只说你想要听到的话 前言: 何为真实和真相,所谓真相,就是别人想让你知道的真相!洞察谎言与真相! 人与人交流话语中,处处充满了不真实,完全真实的只是其中一小部分,这

写给大数据开发:你真的“慢“了吗?揭秘技术与职场的平衡艺术

你是否曾经在深夜里,面对着一个棘手的数据处理问题,感到无比沮丧?或者在一次重要的项目汇报中,突然语塞,无法清晰地表达你的技术方案?作为一名大数据开发者,这些场景可能再熟悉不过。但别担心,因为你并不孤单。让我们一起探讨如何在这个瞬息万变的行业中,既磨练技术利刃,又培养职场软实力。 目录 技术与时间的赛跑1. 长远视角的重要性2. 复利效应在技能学习中的应用 跨界思维:数据结构教我们的职场智

Vue 中实现视频播放的艺术

随着前端技术的飞速发展,视频播放在 Web 应用中已经成为了一个不可或缺的功能。从社交媒体平台到教育网站,再到在线购物平台,视频元素无处不在。而 Vue.js 作为当今最流行的前端框架之一,在实现视频播放时提供了很多强大的工具和技巧。在这篇博客中,我们将深入探讨如何使用 Vue.js 实现视频播放功能,不仅仅是简单地嵌入视频,还要添加一些高级功能,如自定义播放器控件、播放进度条、视频切换、事件处理

“掌握Linux网络编程艺术,构建跨平台的网络通信解决方案!“#Linux系统编程之网络编程

"掌握Linux网络编程艺术,构建跨平台的网络通信解决方案!"#Linux系统编程之网络 前言预备知识一、 网络编程概述1.1 网络编程概述图1.2 TCP/UDP对比(面试)1.3 端口号的作用 二、 字节序2.1 大端字节序(Big-Endian)2.2 小端字节序(Little-Endian)2.3 字节序的重要性2.4 字节序转换函数2.5 字节序示意图 三、 socket编程步骤四

Maven 深入指南:构建自动化与项目管理的艺术

目录 1.引言 2.Maven 的核心概念 2.1 POM(Project Object Model) 2.2 依赖管理 2.3 生命周期 2.4 插件和目标 3.Maven 的安装与配置 3.1 安装 Maven 3.2 配置 settings.xml 4.Maven 的使用 4.1 创建项目 4.2 构建项目 4.3 运行测试 4.4 部署项目 5.Maven 插

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步:获取 Canvas 对象和渲染上下文 第三步 画布#ID选择器执行回调——

Android canvas save restore saveLayer的异同点

一、基础操作 drawText、drawRect、drawColor等 对于这些基础操作,相信每一个安卓开发者都能说上个一二点出来,这些就不多做介绍,api 工程师必备技能之一。 在进阶之前,先回答这个问题:    问:canvas既然大家都理解为画布,那如果先在画布上绘制了某些内容,然后再canvas.rotate旋转了画布,为什么这些已经绘制在画布上的内容不会跟随着旋转?    答:由此可

0--数据的艺术

一:数据 数据:程序的操作对象,用于描述客观事物 数据元素:组成数据的基本单位 数据项:一个数据元素由若干数据项组成 数据对象:性质相同的数据元素的集合 二:数据结构: 数据对象中数据元素之间的关系 三:逻辑结构 集合:数据元素之间没有特别的关系,同属相同集合 线性:数据元素是一对一的关系 树形:数据元素存在一对多的层次关系 图形:数据元素多对多的关系

Web开发的艺术:C#开发中实现代码简洁性与规范性的终极指南

一、变量的要求 变量名 1.简短有意义: 合适: student_count,student_ids,student_enable_list, water_price 不合适: numberOfItemsInTheCart, totalPriceOfTheOrderInTheShoppingCart,temp, data,list 2.变量名之间不要太像: 合适: totalAm