第25章 canvas绘制圆形

本文介绍了一个简单的HTML页面,该页面使用JavaScript来绘制一个紫色的笑脸。笑脸由多个圆形组成,包括脸部、眼睛和嘴巴等特征。通过`<canvas>`元素进行绘图,并利用`JavaScript`的`CanvasRenderingContext2D`接口实现。

html

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="25.js"></script>
<style type="text/css">
body{ margin:0; padding:0;}
</style>
</head>
<body onLoad="draw('canvas')">
<canvas id="canvas" width='400' height="300"></canvas>
</body>
</html>

 

js

// JavaScript Document
function draw(id){
	var context = document.getElementById(id).getContext('2d');
	context.beginPath();
	context.strokeStyle = "rgb(0,0,0)";
	context.arc(100,100,100,0,2*Math.PI,true);
	context.closePath();
	context.fillStyle = 'rgb(200,0,200)';
	context.fill();    
	
	context.beginPath();
	context.arc(50,75,25,0,2*Math.PI,true);
	context.fillStyle = 'rgb(0,0,0)';
	context.fill();
	
	context.beginPath();
	context.arc(150,75,25,0,2*Math.PI,true);
	context.fillStyle = 'rgb(0,0,0)';
	context.fill();
	
	context.beginPath();
	context.arc(150,75,25,0,2*Math.PI,true);
	context.fillStyle = 'rgb(0,0,0)';
	context.fill();
	
	context.beginPath();
	context.arc(100,125,10,0,2*Math.PI,true);
	context.fillStyle = 'rgb(0,0,0)';
	context.fill();
	
	context.beginPath();
	context.strokeStyle = "rgb(0,0,0)";
	context.lineWidth = 5;
	context.arc(100,150,25,Math.PI/6,5*Math.PI/6,false);
	
	context.stroke();
}

 

效果图:

 

 

 

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
### 使用 HTML5 Canvas API 绘制贝塞尔曲线 在 HTML5 中,`<canvas>` 元素提供了一个绘图表面,允许开发者使用 JavaScript 来绘制图形。对于贝塞尔曲线的绘制Canvas 提供了两种主要的方法:`quadraticCurveTo()` 和 `bezierCurveTo()`。 #### 二次贝塞尔曲线 二次贝塞尔曲线由起始点、结束点以及一个控制点定义。下面是一个简单的例子展示如何利用 `quadraticCurveTo()` 方法来实现这样的效果[^3]: ```javascript const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(75, 25); // 起始点 ctx.quadraticCurveTo(25, 100, 100, 100); // 控制点 (25, 100),终点 (100, 100) ctx.stroke(); // 渲染路径 ``` 这段代码会创建一条从 `(75, 25)` 开始经过控制点 `(25, 100)` 到达最终位置 `(100, 100)` 的平滑过渡线条。 #### 三次贝塞尔曲线 相比之下,三次贝塞尔曲线则更加复杂一些,因为它涉及到两个不同的控制点。这可以通过调用 `bezierCurveTo()` 函数完成[^4]: ```javascript const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(75, 40); // 第一对控制点坐标为 (85, 140),第二对为 (150, 20) ,最后到达目标点 (250, 100) ctx.bezierCurveTo(85, 140, 150, 20, 250, 100); ctx.stroke(); ``` 此段脚本将会画出一条更复杂的弯曲轨迹,它不仅考虑到了起点和终点之间的关系,还加入了额外的影响因素——即两组不同方向上的拉力使得整体形状更为灵活多变。 #### 圆弧绘制 除了贝塞尔曲线外,Canvas 还支持直接绘制圆弧。可以借助于 `arc()` 或者 `arcTo()` 方法轻松构建圆形部分或其他类型的弧形结构[^1]: ```javascript const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); // 参数分别为中心(x,y),半径r,起始角度startAngle,终止角度endAngle,顺时针/逆时针direction ctx.arc(95, 50, 40, 0 * Math.PI / 180, 360 * Math.PI / 180, false); ctx.stroke(); ``` 这里展示了怎样围绕指定的位置 `(95, 50)` 创建一个完整的圆圈;当然也可以只生成特定范围内的扇区或弓形区域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值