Canavs arcTo方法的理解

Canavs arcTo方法的理解

arcTo方法有四个參数

參数1,2为第一个控制点的x,y坐标,參数2为第二个控制点的坐标,參数3为绘制圆弧的半径.

起点和第一个控制点组成的延长线与第一个控制点和第二个控制点组成的延长线都是和圆弧相切的,这个圆弧也就是被夹在两条延长线中间.圆越大,两条延长线能形成的角度能夹住的圆弧就越小.

<span>Canavs arcTo方法的理解</span>

以下写了一个简单的动画帮助理解

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
canvas {
	width: 400px;
	height: 400px;
	background-color: #EEEEEE;
}
</style>
<script>
	window.onload = function() {
		var canvas = document.getElementById('canvas');
		var arcToPoint1 = {x:120, y:40};
		var arcToPoint2 = {x:60, y:80}
		var context = canvas.getContext('2d');
		if (!canvas || !canvas.getContext) {
			return;
		} else {
			timer = setInterval(function(){
				if (arcToPoint2.x < 150) {
					arcTo (context, arcToPoint1, arcToPoint2);
					arcToPoint2.x += 2;
				} else {
					clearInterval(timer);
				}
			}, 300);
		}
	}
	
	function arcTo () {
		var startPoint = {x: 20, y: 40};
		var context = arguments[0];
		var arcToPoint1 = arguments[1];
		var arcToPoint2 = arguments[2];
		var context = canvas.getContext('2d');
		
		context.clearRect(0,0,context.canvas.width, context.canvas.height)
		
		context.beginPath();
		context.moveTo(startPoint.x, startPoint.y);
		context.strokeStyle = "red";
		context.lineWidth = 1;
		context.arcTo(arcToPoint1.x, arcToPoint1.y, arcToPoint2.x, arcToPoint2.y, 40);
		context.stroke();
		
		context.beginPath();
		context.moveTo(startPoint.x, startPoint.y);
		context.strokeStyle = "black";
		context.lineWidth = 1;
		context.lineTo(arcToPoint1.x, arcToPoint1.y);
		context.fillText('arcToPoint1', arcToPoint1.x + 10, arcToPoint1.y - 5) 
		context.stroke();
		
		context.beginPath();
		context.moveTo(arcToPoint1.x, arcToPoint1.y);
		context.strokeStyle = "black";
		context.lineWidth = 1;
		context.lineTo(arcToPoint2.x, arcToPoint2.y);
		context.fillText('arcToPoint2', arcToPoint2.x + 10, arcToPoint2.y + 10) 
		context.stroke();
	}
</script>
</head>
<body>
	<canvas id="canvas">
		此游览器不支持canvas标签
	</canvas>
</body>
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119238.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库的数据模型是网状模型_网状模型的数据结构是

    数据库的数据模型是网状模型_网状模型的数据结构是层次数据模型    定义:层次数据模型是用树状<层次>结构来组织数据的数据模型。    满足下面两个条件的基本层次联系的集合为层次模型    1.有且只有一个结点没有双亲结点,这个结点称为根结点    2.根以外的其它结点有且只有一个双亲结点其实层次数据模型就是的图形表示就是一个倒立生长的树,由基本数据结构中的树(或者二叉树)的定义可知,每棵树都有且仅有一个根节点,其余的…

    2025年6月28日
    6
  • 如何把文件复制到桌面_如何把桌面文件放一起

    如何把文件复制到桌面_如何把桌面文件放一起如何解决电脑桌面文件无法删除问题电脑是现在最常用的工具之一,有些用户遇到了桌面文件无法删除问题,想知道如何解决,接下来小编就给大家介绍一下具体的操作步骤。具体如下:1.首先第一步鼠标右键单击桌面,在弹出的菜单栏中根据下图所示,点击【刷新】选项,查看是否删除文件,或者将电脑重新启动后再次删除。2.第二步如果仍然无法删除文件,则打开【计算机】窗口,根据下图所示,依次点击【组织-文件夹和搜索选项】。…

    2025年8月25日
    3
  • int对应的jdbctype_java clob类型

    int对应的jdbctype_java clob类型在Oracle中有些字段不是必填时在用户使用的时候会出现数据null的情况。这个时候在Oracle中是无法进行插入的。JDBCTypeJavaTypeCHARStringVARCHARStringLONGVARCHARStringNUMERICjava.math.BigD…

    2022年10月20日
    5
  • 笔记29-MySQL多表&事务

    笔记29-MySQL多表&事务今日内容1.多表查询2.事务3.DCL多表查询:*查询语法: select 列名列表 from 表名列表 where….*准备sql #创建部门表 CREATETABLEdept( idINTPRIMARYKEYAUTO_INCREMENT, NAMEVARCHAR(20) ); INSERTINTOdept(NAME)VALUES(‘开发部’),(‘市场部’),(‘财务部’); #创建员工表 CREATETAB

    2022年7月27日
    8
  • Elasticsearch-JSON串查询总结

    Elasticsearch-JSON串查询总结对Elasticsearch的JSON方式查询总结

    2022年5月6日
    378
  • qxdm使用教程_log命令

    qxdm使用教程_log命令(一)、首先保证PC机和手机串口(或并口)之间连接畅通,这个可以从QXDM工具的系统栏看出,如果是MSM6000的项目,系统栏会显示“COMX:SURF6000-ZRF6000”;如果是MSM6025的项目,系统栏会显示“COMX:SURF6025-ZRF6025”。其中X为某个串口,比如COM1,X=1等。(二)、QXDM打开后,先配置好messageview要打印的信息,具体的配置如

    2022年10月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号