【Canvas技法】图解绘制圆弧的重要函数 arc(x,y,r,startAngle,endAngle,clockWise)

【一图释疑】

【绘制上图用代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head>
     <title>Html5/Canvas中绘制圆弧的重要函数 arc(x,y,r,startAngle,endAngle,clockWise) 的具体用法图解。</title>
     <style type="text/css">
     .centerlize{
        margin:0 auto;
        width:1200px;
     }
     </style>
	 </head>

     <body onload="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=1024;
const HEIGHT=512;

// 舞台对象
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.init=function(){
		
	}

	// 更新
	this.update=function(){
		
	}

	// 画背景
	this.paintBg=function(ctx){
		ctx.clearRect(-WIDTH/2,-HEIGHT/2,WIDTH,HEIGHT);// 清屏	

		// 上标题
		ctx.textBaseline="bottom";
		ctx.textAlign="center";
		ctx.font = "24px consolas";
		ctx.fillStyle="black";
		ctx.fillText("arc(x,y,radius,start,end,true/false)",0,-220);

		//----------以下为左圆

		// 逆时针第一象限
		ctx.beginPath();
		ctx.arc(-250,0,200,0,-Math.PI/2,true);
		ctx.lineTo(-250,-200);
		ctx.lineTo(-234,-208);
		ctx.lineTo(-250,-200);
		ctx.lineTo(-234,-192);
		ctx.lineWidth=2;
		ctx.strokeStyle="blue";
		ctx.stroke();

		// 逆时针第二象限
		ctx.beginPath();
		ctx.arc(-250,0,200,-Math.PI/2,-Math.PI,true);
		ctx.lineTo(-450,0);
		ctx.lineTo(-458,-16);
		ctx.lineTo(-450,0);
		ctx.lineTo(-442,-16);
		ctx.lineWidth=2;
		ctx.strokeStyle="green";
		ctx.stroke();

		// 逆时针第三象限
		ctx.beginPath();
		ctx.arc(-250,0,200,-Math.PI,-Math.PI*3/2,true);
		ctx.lineTo(-250,200);
		ctx.lineTo(-262,192);
		ctx.lineTo(-250,200);
		ctx.lineTo(-262,208);
		ctx.lineWidth=2;
		ctx.strokeStyle="teal";
		ctx.stroke();

		// 逆时针第四象限
		ctx.beginPath();
		ctx.arc(-250,0,200,-Math.PI*3/2,-Math.PI*2,true);
		ctx.lineTo(-50,0);
		ctx.lineTo(-42,16);
		ctx.lineTo(-50,0);
		ctx.lineTo(-58,16);
		ctx.lineWidth=2;
		ctx.strokeStyle="navy";
		ctx.stroke();

		// 标注角度
		var arr=["-PI/2","-PI","-PI*3/2","-PI*2或0"];
		for(var i=0;i<arr.length;i++){
			var theta=-(i+1)*Math.PI/2;
			var x=150*Math.cos(theta);
			var y=150*Math.sin(theta);

			ctx.textBaseline="bottom";
            ctx.textAlign="center";
            ctx.font = "24px consolas";
            ctx.fillStyle="black";
            ctx.fillText(arr[i],x-260,y+5);
		}

		// 标注true=逆时针
		ctx.textBaseline="bottom";
		ctx.textAlign="center";
		ctx.font = "48px consolas";
		ctx.fillStyle="blue";
		ctx.fillText("true",-250,-10);
		ctx.fillText("逆时针",-250,50);
		

		//----------- 以下为右边圆

		// 顺时针第四象限
		ctx.beginPath();
		ctx.arc(250,0,200,0,Math.PI/2,false);
		ctx.lineTo(250,200);
		ctx.lineTo(264,192);
		ctx.lineTo(250,200);
		ctx.lineTo(264,208);
		ctx.lineWidth=2;
		ctx.strokeStyle="red";
		ctx.stroke();

		// 顺时针第三象限
		ctx.beginPath();
		ctx.arc(250,0,200,Math.PI/2,Math.PI,false);
		ctx.lineTo(50,0);
		ctx.lineTo(58,16);
		ctx.lineTo(50,0);
		ctx.lineTo(42,16);
		ctx.lineWidth=2;
		ctx.strokeStyle="maroon";
		ctx.stroke();

		// 顺时针第二象限
		ctx.beginPath();
		ctx.arc(250,0,200,Math.PI,Math.PI*3/2,false);
		ctx.lineTo(250,-200);
		ctx.lineTo(234,-192);
		ctx.lineTo(250,-200);
		ctx.lineTo(234,-208);
		ctx.lineWidth=2;
		ctx.strokeStyle="purple";
		ctx.stroke();

		// 顺时针第一象限
		ctx.beginPath();
		ctx.arc(250,0,200,Math.PI*3/2,Math.PI*2,false);
		ctx.lineTo(450,0);
		ctx.lineTo(442,-16);
		ctx.lineTo(450,0);
		ctx.lineTo(458,-16);
		ctx.lineWidth=2;
		ctx.strokeStyle="fuchsia";
		ctx.stroke();

		// 标注角度
		var arr=["PI/2","PI","PI*3/2","PI*2或0"];
		for(var i=0;i<arr.length;i++){
			var theta=(i+1)*Math.PI/2;
			var x=150*Math.cos(theta);
			var y=150*Math.sin(theta);

			ctx.textBaseline="bottom";
            ctx.textAlign="center";
            ctx.font = "24px consolas";
            ctx.fillStyle="black";
            ctx.fillText(arr[i],x+240,y+5);
		}

		// 标注true=逆时针
		ctx.textBaseline="bottom";
		ctx.textAlign="center";
		ctx.font = "48px consolas";
		ctx.fillStyle="red";
		ctx.fillText("false",250,-10);
		ctx.fillText("顺时针",250,50);

		// 下标题
		ctx.textBaseline="bottom";
		ctx.textAlign="center";
		ctx.font = "24px consolas";
		ctx.fillStyle="black";
		ctx.fillText("arc函数末参与起止角度的配合",0,220);

		ctx.font = "8px consolas";
		ctx.fillStyle="black";
		ctx.fillText("逆火原创",WIDTH/2-30,HEIGHT/2-10);
	}

	// 画前景
	this.paintFg=function(ctx){
		
	}
}


/*---------------------------------------------
勿问成功的秘诀为何,且尽全力做你应该做的事吧。
成功的秘诀端赖坚毅的决心。
成功并非重要的事,重要的是努力。
成功是用努力,而非用希望造成。
不论成功或失败,皆存乎自己。
成功毫无技巧可言,我一向只对工作尽力而为而已。
----------------------------------------------*/
//-->
</script>

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/516928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[C#]OpenCvSharp实现直方图均衡化全局直方图局部直方图自适应直方图

【什么是直方图均衡化】 直方图均衡化是一种简单而有效的图像处理技术&#xff0c;它旨在改善图像的视觉效果&#xff0c;使图像变得更加清晰和对比度更高。其核心原理是将原始图像的灰度直方图从可能较为集中的某个灰度区间转变为在全部灰度范围内的均匀分布。通过这种方法&a…

【opencv】教程代码 —video(2) optical_flow (稀疏光流、稠密光流)

1. optical_flow.cpp 稀疏光流 #include <iostream> // 引入输入输出流库 #include <opencv2/core.hpp> // 引入OpenCV的核心功能模块 #include <opencv2/highgui.hpp> // 引入OpenCV的高级GUI模块&#xff0c;提供显示图像的功能 #include <opencv2/imgp…

VSCode SSH 连接 Could not establish connection to “XXX“: spawn UNKNOWN.

1. 确认问题&#xff1a; 拉取vscode终端&#xff1a;快捷键 ctrl(数字1旁边那个) 输入&#xff1a;ssh -V 2. 解决方法 2.1 找到本地SSH 位置 默认本地路径&#xff1a; C:\Windows\System32\OpenSSH 2.2 找到要修改的位置 进入 ssh 插件的设置&#xff08;可以通过在插…

基于springboot实现社区医院信息平台系统项目【项目源码+论文说明】

基于springboot实现社区医院信息平台系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了社区医院信息平台的开发全过程。通过分析社区医院信息平台管理的不足&#xff0c;创建了一个计算机管理社区医院信…

实现 select 中嵌套 tree 外加搜索

实现 select 中嵌套 tree 外加搜索 参考地址实现地址 代码 <el-form-item label"考核人员" prop"userIdArr" v-if"title 发起考核"><el-popover v-model"popoverVisible" placement"bottom" trigger"cli…

MySQL-单行函数:数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数、MySQL信息函数、其他函数、单行函数练习

1.数值函数 1.1 基本的操作 SELECT ABS(-123),ABS(32),SIGN(-23),SIGN(43),PI(),CEIL(32.32),CEILING(-43.23),FLOOR(32.32), FLOOR(-43.23),MOD(12,5),12 MOD 5,12 % 5 FROM DUAL;1.2 取随机数 SELECT RAND(),RAND(),RAND(10),RAND(10),RAND(-1),RAND(-1) FROM DUAL;1.3 四…

见证历史:Quantinuum与微软取得突破性进展,开启了可靠量子计算的新时代!

Quantinuum与微软的合作取得了重大突破&#xff0c;将可靠量子计算带入了新的时代。他们结合了Quantinuum的System Model H2量子计算机和微软创新的量子比特虚拟化系统&#xff0c;在逻辑量子比特领域取得了800倍于物理电路错误率的突破。这一创新不仅影响深远&#xff0c;加速…

Spring Boot 整合 RabbitMQ 实现延迟消息

关于 RabbitMQ 消息队列&#xff08;Message Queuing&#xff0c;简写为 MQ&#xff09;最初是为了解决金融行业的特定业务需求而产生的。慢慢的&#xff0c;MQ 被应用到了更多的领域&#xff0c;然而商业 MQ 高昂的价格让很多初创公司望而却步&#xff0c;于是 AMQP&#xff0…

点亮创意:ChatGPT如何搭桥DALL-E图像编辑新纪元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

金融中的数学知识

随机偏微分方程相比普通偏微分方程具有额外的随机项&#xff0c;反映了其描述的现象具有随机性质

在ArcGIS Pro中优雅的制作荧光图

最近在网上看到了荧光图&#xff0c;觉得挺帅气&#xff0c;去网上查询了怎么制作荧光图&#xff0c;发现大部分都是QGIS的教程&#xff0c;作为ArcGIS的死忠用户&#xff0c;决定在ArcGIS Pro中实现&#xff0c;其实挺简单的。 1、软件&#xff1a;ArcGIS Pro3.0 2、点数据&a…

Linux的软链接和硬链接

1、软链接 概念&#xff1a;给文件创建一个快捷方式&#xff0c;依赖原文件&#xff0c;和普通文件没有区别。 特性&#xff1a; 可以给存在的文件或目录创建软链接可以给不存在的文件或目录创建软链接可以跨文件系统创建软链接删除软链接不影响原文件、删除原文件会导致软链…

【Java基础】Java基础知识整合

文章目录 1. 转义字符2. 变量2.1 字符串与整型相加2.2 byte和short的区别2.3 float和double的区别2.4 char类型2.5 boolean类型2.6 自动类型转换及运算2.7 强制类型转换2.8 String的转换2.9 除法运算2.10 取模规则 3. 自增4. 逻辑运算符5. 赋值运算 6. 三元运算符&#xff1a;7…

一文介绍回归和分类的本质区别 !!

文章目录 前言 1、回归和分类的本质 &#xff08;1&#xff09;回归&#xff08;Regression&#xff09;的本质 &#xff08;2&#xff09;分类&#xff08;Classification&#xff09;的本质 2、回归和分类的原理 &#xff08;1&#xff09;回归&#xff08;Regression&#x…

力扣 115. 不同的子序列

题目来源&#xff1a;https://leetcode.cn/problems/distinct-subsequences/description/ C题解&#xff1a;动态规划。 dp[i][j] 表示 t[0] ~ t[i-1] 在 s[0] ~ s[j-1] 中出现的个数。因为 t 短&#xff0c;所以把 t 放在外循环。 当 t[i-1] 不等于 s[j-1] 时&#xff0c;s[…

认识 Redis 与 分布式

Redis 官网页面 Redis官网链接 Redis 的简介 Redis 是一个在内存中存储数据的中间件 一方面用于作为数据库&#xff0c;另一方面用于作为数据缓存&#xff0c;适用于分布式系统中 Redis 基于网络&#xff0c;进行进程间通信&#xff0c;把自己内存中的变量给别的进程&#xf…

深度解析GPT中的Tokenizer

继学习完深度解析大语言模型中的词向量后&#xff0c;让我们继续学习大语言模型中另外几个重要概念&#xff1a;token&#xff08;词元&#xff09;、tokenization&#xff08;词元化&#xff09;、tokenizer&#xff08;词元生成器&#xff09;。 在GPT模型中&#xff0c;toke…

【与C++的邂逅之旅】--- 内联函数 auto关键字 基于范围的for循环 nullptr

关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 博主专栏&#xff1a; &#x1f4a1; 与C的邂逅之旅 &#x1f4a1; 数据结构之旅 上篇我们了解了函数重载和引用&#xff0c;我们继续学习有关C的一些小语法— 内联函数&#xff0c;auto关键字&#xff0c;基于范围的for循环以及 nullptr&…

设计模式——建造者模式03

工厂模式注重直接生产一个对象&#xff0c;而建造者模式 注重一个复杂对象是如何组成的&#xff08;过程&#xff09;&#xff0c;在生产每个组件时&#xff0c;满足单一原则&#xff0c;实现了业务拆分。 设计模式&#xff0c;一定要敲代码理解 组件抽象 public interface …

02---webpack基础用法

01 entry打包的入口文件&#xff1a; 单入口entry是一个字符串:适用于单页面项目module.exports {entry:./src/index.js}多入口entry是一个对象module.exports {entry:{index:./src/index.js,app:./src/app.js}} 02 output打包的出口文件&#xff1a; 单入口配置module.ex…