arcTo()函数讲起来有点绕,也不太好懂,大家可以先去这里了解了解,我就不多说了。
先上个效果图:
再来个分析图:
(PS:
1、图中各个坐标点为假设点,作为一个特例来说,大家可以试着先写这个特例,再总结出通用方法。老师讲这个的时候,就是先做的特例,然后分析通用。我也是按照这个来的,通过特例慢慢的通用就出来了。
2、不得不佩服老师的讲学方法,什么虚的都能被他整成实的来给大家分析,佩服老师感谢老师,向老师学习)
最后上代码:
window.onload=function(){ var myCanvas = document.getElementById("myCanvas"); if(myCanvas.getContext("2d")){ myCanvas.width = document.documentElement.clientWidth-20;; myCanvas.height = document.documentElement.clientHeight-20;; var context =myCanvas.getContext("2d"); drawMoon(context,400,400,200,0,2); }else{ return false; } } /** *该方法用来绘制一轮弯月 *@param cxt:canvas的上下文环境 *@param x:左上角x轴坐标 *@param y:左上角y轴坐标 *@param R:大圆半径 @param rot:旋转角度 *@param d:两条直线在x轴的切点坐标(d越大绘制出来的月亮越弯,越小绘制出来的越圆,当d为0时绘制一个半圆,当d为负数时绘制不出圆) *@param fillColor:弯月的填充色 *@param **/ function drawMoon(cxt,x,y,R,rot,d,/*optional*/fillColor){ if(d<0) return false; if(d>20) return false; cxt.save(); cxt.translate(x,y);//设置绘图开始位置,也就是(0,0)的位置 cxt.rotate(rot*Math.PI/180);//旋转绘图(将角度转换成弧度) cxt.scale(R,R);//缩放绘图的宽度和高度 //绘制弯月图形 strokeMoonPath(cxt,d); cxt.fillStyle = fillColor||"#fb5"; cxt.fill(); cxt.restore(); } /** *该方法用来绘制弯月的轮廓 *(这里的直角坐标系为:x轴正方向向右,y轴正方向向下,且圆心所在为x轴和y轴中心点,也就是(0,0)的位置) *(这里在(0,0)的地方绘制一个小绘图,再通过translate进行位移,通过scale进行放大) *@param cxt:canvas的上下文环境 *@param d:两条直线在x轴的切点x坐标 **/ function strokeMoonPath(cxt,d){ cxt.beginPath(); //1、先绘制大圆的圆弧:从0.5PI到1.5PI,逆时针绘制 //arc方法最后一个参数为“是否逆时针绘制”,值为false,因此默认的是顺时针 //这里设置成true,就是逆时针绘制 cxt.arc(0,0,1,0.5*Math.PI,1.5*Math.PI,true); //2、将起点移动到大圆弧最顶点(x0,y0)(分析图A点坐标) //此时圆心坐标为(0,0),那么大圆最顶点的坐标为(0,-1) cxt.moveTo(0,-1); //3、设置(x1,y1)和(x2,y2)两个点,从(x0,y0)到(x1,y1),从(x1,y1)到(x2,y2)形成两条直线,进而使用arcTo()函数计算切点绘制圆弧 //(0,-1):分析图中A点坐标 //(d,0):分析图中C点坐标 //(0,1):分析图中B点坐标 //dis计算出AC的长度,而r=(AH*AC)/HC且AH为大圆半径1,HC为C点的横坐标也就是d var r = 1*dis(0,-1,d,0)/d; cxt.arcTo(d,0,0,1,r); cxt.closePath(); } /** *该方法用来计算第三条边的长度,使用勾股定理进行计算 *@param x1:第一个点的横坐标 *@param y1:第一个点的纵坐标 *@param x2:第二个点的横坐标 *@param y1:第二个点的横坐标 **/ function dis(x1,y1,x2,y2){ return Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); }
感谢老师的分享!
相关推荐
SVG和Canvas绘图:使用Canvas绘制基本图形.docx
SVG和Canvas绘图:Canvas路径绘制技巧.docx
下面是一个简单的示例代码,展示了如何使用`arcTo()`在Canvas上绘制弧线: ```javascript $(function() { var canvas = $('#canvas')[0]; var item = canvas.getContext('2d'); item.strokeStyle = 'rgb(188,219...
Canvas API允许开发者使用JavaScript来绘制2D图形,包括简单的线条、形状以及复杂的图像处理。在本教程中,我们将学习如何利用Canvas API创建一个实时更新的时钟。 首先,我们需要在HTML文件中创建一个`<canvas>`...
canvas-demo 本示例是源于项目的一个需求做的一个demo。初衷只是为了实现通过拖拽绘制用户所需大小的矩形,后面就继续完善了一下功能。目前实现了通过拖拽绘制矩形、移动画布上现有的矩形、保存当前画布、撤销与...
采用Canvas绘制的一个可配置的刻度(尺)组件。 主要常用于移动端数值、金额等的滑动选择,增强用户交互体验。 刻度组件 demo,效果图: 链接 采用Canvas绘制一个可配置的刻度(尺)组件:; github地址: 演示地址: ...
本文将深入探讨如何利用Canvas类来绘制一个Android机器人,从而理解其基本概念、方法以及如何实现复杂的图形绘制。 首先,Canvas类是Android系统提供的一个用于在内存中的Bitmap上进行绘制的接口。它可以用来画线、...
HTML canvas中 arcTo()的使用方法,希望对您学习canvas中的arcTo()有所帮助以后还会持续的更新关于网页制作编写上的,希望您能多多支持
2.22_用canvas绘制一角弯月|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全
- **绘图上下文**:Canvas API主要通过`<canvas>`元素和它的`2d`绘图上下文来操作,这个上下文提供了一系列方法用于画线、填充形状、绘制图像等。 - **坐标系统**:Canvas的坐标系统以左上角为原点,X轴向右,Y轴...
第2章深入研究了如何使用Canvas的API进行绘制;第3章告诉读者如何绘制并操作Canvas中的文本;第4章专门讲解图像、图像的操作及视频处理;第5章介绍如何实现平滑的动画效果;第6章讲解如何用JavaScript语言来实现精灵...
canvas_xcanvas绘制海报,生成logo二维码。也可生成编辑界面,用户自定义输入,一键生成。默认开启图片跨域,但服务端的图片也需要后端进行相应的跨域设置。使用方法npm 下载使用npm i -S @sayll/canvas_x// js 片段...
本篇文章将深入解析Canvas的原理与使用方法,并通过实例展示如何用代码绘制一个简单的安卓机器人。 首先,我们需要理解Canvas的基本概念。在Android中,Canvas是一个“画布”,你可以把它想象成一张白纸,开发者...
- **1.5 基本的绘制操作**:这部分内容主要讲解如何使用`canvas`的基本绘制方法,如`fillRect()`、`strokeRect()`等。 - **1.6 事件处理** - **1.6.1 鼠标事件**:介绍如何处理用户的鼠标点击、移动等事件。 - **...
本教程将详细介绍如何使用canvas绘制一个动态的钟表,这涉及到JavaScript和Canvas API的基础知识。 首先,我们需要在HTML页面中创建一个canvas元素,并设置其id以便在JavaScript中引用: ```html <canvas id=...
本文将详细介绍如何使用JavaScript编写一个函数,实现在Canvas上绘制文本内容时自动换行。 首先,我们需要理解Canvas API中的`fillText()`方法,它是用来在Canvas上填充文本的。但这个方法不支持文本换行,所以我们...
在这个“微信小程序学习用demo:使用canvas绘制雷达图”项目中,我们将探讨如何利用微信小程序的框架和HTML5的Canvas API来创建一个动态的雷达图。 首先,微信小程序的开发涉及的主要知识点包括: 1. **微信小程序...
本教程将详细介绍如何利用canvas实现一个动态的大转盘抽奖功能,包括转盘的绘制、转速控制以及奖项设置的灵活调整。 一、canvas基础 在HTML中,创建一个canvas元素很简单,只需在页面中插入`<canvas id="myCanvas...
1. **canvas API的使用**:在canvas上绘制流程图,首先要获取canvas元素,然后通过`getContext('2d')`方法获取2D渲染上下文。所有的绘图操作,如画线、填充形状、设置线条样式等,都是通过对这个2D渲染上下文进行...
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上进行动态图形绘制,创建复杂的动画以及构建交互式的游戏。这本书《HTML5 Canvas核心技术:图形、动画与游戏开发》由David Geary撰写,深入探讨了Canvas...