我的项目2用Canvas写的一些图形

在项目中,需要用Canvas画一些图形,和大家分享一下。

由于需要常用到这些图形,就将图形封装成了一个一个的方法,在这里和大家分享一下这些方法吧!

用到的一些变量(有一些变量可能没写出来,大家看了就补一下吧):<pre name="code" class="html">lineWidth="1";
<pre name="code" class="html">color="blue";
strokeStyle="red";
fillStyle="blue";


//绘制横线

function drawhengxian(startPoint, l, color) {
		context.beginPath();
		context.moveTo(startPoint.x, startPoint.y);
		context.lineTo(startPoint.x + l, startPoint.y);

		context.lineWidth = lineWidth;
		context.strokeStyle = color;
		context.stroke();

	}
//绘制折线
function drawZheXian(points) {
		// 绘制折现
		context.beginPath();
		context.moveTo(points[0].x, points[0].y);
		for (var i = 1; i < points.length; i++) {
			context.lineTo(points[i].x, points[i].y);
		}

		context.lineWidth = lineWidth;
		context.strokeStyle = strokeStyle;
		context.stroke();
	}
//绘制竖线
function drawshuxian(starPoint, l) {
		context.beginPath();
		context.moveTo(starPoint.x, starPoint.y);
		context.lineTo(starPoint.x, starPoint.y - l);

		context.lineWidth = lineWidth;
		context.strokeStyle = strokeStyle;
		context.stroke();
	}
//绘制空心圆
function drawEmptyArc(center, radius) {
		context.beginPath();
		context.arc(center.x, center.y, radius, 0, 2 * Math.PI, false);
		context.fillStyle = fillStyle;
		context.fill();

		context.lineWidth = lineWidth;
		context.strokeStyle = strokeStyle;
		context.stroke();

	}
//绘制实心三角形(即有颜色填充的三角形)
function drawshendanshu(points, colors) {
		// 绘制折现
		context.beginPath();
		context.moveTo(points[0].x, points[0].y);
		for (var i = 1; i < points.length; i++) {
			context.lineTo(points[i].x, points[i].y);
		}
		//结束绘制
		context.closePath();

		// 进行绘图处理
		context.fillStyle = colors;

		// 填充路径
		context.fill();

	}
//绘制雪花图案
function drawCha(center, l) {

		context.beginPath();

		context.moveTo(center.x - l, center.y - l);
		context.lineTo(center.x + l, center.y + l);

		context.moveTo(center.x - l * 1.414, center.y);
		context.lineTo(center.x + l * 1.414, center.y);

		context.moveTo(center.x - l, center.y + l);
		context.lineTo(center.x + l, center.y - l);

		context.lineWidth = lineWidth;
		context.strokeStyle = strokeStyle;
		context.stroke();

	}
//绘制电源(即三条长短不一的竖线)
function drawsanshuxian(center, l, isAnode) {
		context.beginPath();

		if (isAnode) {

			context.moveTo(center.x - l, center.y - l * 3);
			context.lineTo(center.x - l, center.y + l * 3);

			context.moveTo(center.x, center.y - l * 2);
			context.lineTo(center.x, center.y + l * 2);

			context.moveTo(center.x + l, center.y + l);
			context.lineTo(center.x + l, center.y - l);

		} else {

			context.moveTo(center.x - l, center.y + l);
			context.lineTo(center.x - l, center.y - l);

			context.moveTo(center.x, center.y - l * 2);
			context.lineTo(center.x, center.y + l * 2);

			context.moveTo(center.x + l, center.y - l * 3);
			context.lineTo(center.x + l, center.y + l * 3);

		}

		context.lineWidth = lineWidth;
		context.strokeStyle = strokeStyle;
		context.stroke();

	}
//绘制2个半圆
function drawBanYuan2(center, l, isUp) {

		var radius = l / 4.0;
		var i;

		for (i = 0; i < 2; i++) {
			context.beginPath();
			if (i == 0) {
				context.arc(center.x + radius, center.y, radius, 0, Math.PI, isUp);
			} else {

				context.arc(center.x + 3 * radius, center.y, radius, 0, Math.PI, isUp);
			}

			context.lineWidth = lineWidth;
			context.strokeStyle = strokeStyle;
			context.stroke();
		}

	}
//电阻线(好多小半圆组成,大家可以试一下)
function drawXianQuan(startPoint, l) {
		var r = l / 5;

		var potions1 = [];

		for (var i = 0; i < 5; i++) {
			var px = startPoint.x + i * r;
			var py = startPoint.y;
			potions1.push({
				x: px,
				y: py
			});
		}
		var potions2 = [];

		for (var i = 0; i < 5; i++) {
			var px = startPoint.x + i * r;
			var py = startPoint.y + l / 3;
			potions2.push({
				x: px,
				y: py
			});
		}

		context.beginPath();

		context.moveTo(startPoint.x, startPoint.y + l / 6);
		context.lineTo(startPoint.x + l, startPoint.y + l / 6);

		context.lineWidth = lineWidth;
		context.strokeStyle = strokeStyle;
		context.stroke();

		var radius = l / 10;

		for (var i = 0; i < potions1.length; i++) {
			context.beginPath();

			var isTop;

			if (i % 2 == 0) {
				isTop = true;
			} else {
				isTop = false;
			}

			context.arc(potions1[i].x + radius, potions1[i].y, radius, 0, Math.PI, isTop);
			context.lineWidth = lineWidth;
			context.strokeStyle = strokeStyle;
			context.stroke();
		}

		for (var i = 0; i < potions2.length; i++) {
			context.beginPath();

			var isTop;

			if (i % 2 == 0) {
				isTop = true;
			} else {
				isTop = false;
			}

			context.arc(potions2[i].x + radius, potions2[i].y, radius, 0, Math.PI, isTop);
			context.lineWidth = lineWidth;
			context.strokeStyle = strokeStyle;
			context.stroke();
		}
	}
//绘制实体圆
function drawFillArc(center, radius) {
		context.beginPath();
		context.arc(center.x, center.y, radius, 0, 2 * Math.PI, false);
		context.fillStyle = "black";
		context.fill();
	}
//绘制长方形
function drawFillRect(x, y, a, b) {

		var c = document.getElementById("myCanvas");
		var cxt = c.getContext("2d");
		cxt.strokeRect(x, y, a, b);
	}
时间: 2024-07-31 14:23:20

我的项目2用Canvas写的一些图形的相关文章

用html5中的canvas写的时钟

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8&

用Canvas写一个简单的游戏--别踩白块儿

第一次写博客也不知怎么写,反正就按照我自己的想法来吧!怎么说呢?还是不要扯那些多余的话了,直接上正题吧! 第一次用canvas写游戏,所以挑个简单实现点的来干:别踩白块儿,其他那些怎么操作的那些就不用再扯了,大家应该都懂,不懂的看到黑色的就点就是了,扯多了我打字手也累,大概.链接给你们:http://nowtd.cn/white/ 咱不是理论派,所以在这里不会扯多少理论. 首先看看html的结构吧 1 <header class="container"> 2 <art

千呼万唤 HTML 5 (8) - 画布(canvas)之绘制图形

[索引页][源码下载] 作者:webabcd 介绍HTML 5: 画布(canvas)之绘制图形 画布 Demo - 画布的基本概念及 Demo,canvas.getContext(), CanvasRenderingContext2D, canvas.width, canvas.height, canvas.toDataURL() 在画布上绘制矩形 - canvas.getContext(), fillRect(), fillStyle, lineWidth, strokeStyle, str

学会写出"图形界面+数据库"的程序要多长时间?

[来信] 贺老师好,我也是在自学c++看了您写的启蒙一,感触很大,太谢谢了,我现在做网络运维,会接触到部份erp的内容,,想请老师指点下.从刚开始学c++到能写出个图形化界面并与数据库简单交互的,这样一个小程序,如果不考虑数据库方面的问题,正常要用多长时间,,? [回复] 第一个时间问题,我觉得是因人而异的.这要看个人以前的积累,以及学习能力.所以我无法为你做的估计,事实上,这确实因人而异. 我昨天在手机上看到你的私信时,想到的就是这些.今天开电脑要回复了,想想这是个很有意思的问题,多说一点.

用canvas写仿支付宝中的芝麻信用分的效果

老早写了一个商城的项目,其中有一个很有意思的东西就是仿淘宝芝麻信用那个转圈的效果,当初也是看人家的代码,刚开始看到时候有点懵,后来看了几天总算弄明白原理了,效果图如下: 代码先贴上:最近有点忙,权当记录: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="js/jquery.1.8.2.

用canvas写飞机大战

1.老规矩,当我们开始做项目的时候,我们第一步就是要进行分析,当我们的游戏开始做的时候我们要把一整个游戏分成五个阶段来写: 五个阶段和我方飞机的生命值,还有游戏的得分情况如下: //游戏欢迎状态 const START=0; // 第二阶段:游戏加载状态 const LOADING=1; // 第三阶段:游戏运行状态 const RUNNING=2; // 第四阶段:游戏暂停阶段 const PAUSE=3; // 第五阶段:游戏结束阶段 const GAMEOVER=4; //定义游戏得分 v

项目结束了,写一点自己的心得.

这是我做的第一个“项目”,尽管它没有那么的强大和好看,但是我还是觉得可以了,在这两个月中,从开始的一无所知,到慢慢了解如何设计,然后到做成一个基本成品,到最后交付, 都是一点点积累起来的,刚开始确定好了自己的项目,根本对这个东西没什么想法,通讯软件最关键的是如何将信息从一台主机传到另一个主机上面,在网络原理课上,我学到了一个 socket套接字,通过这个套接字来对主机端口进行查询,具有相应的端口就可以接收到信息,我们小组不单单只是到课外进去查找资料,而且我们将我们这个学期现在所学的知识都用上 了

关于python项目路径导入自己写的库出错的一点思考

其实也是在写自己项目的时候遇到的,以前也遇到了但是一直采取的是回避的策略,这次总算弄清楚所以总结一下. 这个项目的顶级目录是medivac,他本身是一个python模块. 熟悉flask的人都知道,在写一个flask项目的时候,我们常常将一个模块的app初始化放在根目录的__init__.py文件中. 然后可以很方便的把其它需要路由的模块都引入到这个__init__.py中达到自动加载并且路由的效果. 另外也可以使用一个叫做flask蓝图的东西(blueprint),将模块细分. 如果是在__i

用原生Canvas写贪吃蛇及问题解决

为了学习Canvas,写了这个小游戏贪吃蛇供自己和大家学习 Github: https://github.com/zhiyishou/Gsnake Play On: http://zhiyishou.github.io/Gsnake 游戏截图: 前言: 为了方便加载转移,我把整个js都写在了html里,为了方便阅读,将函数结构在html里清晰地分开, 并在代码里有足够注释. 函数结构如下: |----script |----Definations |----Global Snake variab