開発環境 メモ帳
実行環境 Microsoft Edge


palette3.html
<!doctype html>
<head>
<title>palette3</title>
</head>
 
<body>
<canvas id="canvas"></canvas>
<script>
 
main();
 
function main()
{
	canvas.width = 1000;
	canvas.height = 500;
	var ctx = canvas.getContext("2d");
 
	ctx.fillStyle = "rgb(0, 0, 0)";
	ctx.fillRect(0, 0, canvas.width, canvas.height);
 
	var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
	var data = imageData.data;
 
	var r = 125;
	var bright = 0x7f;
	circle(data, 164, 300, r, 0, bright, 1, 0, 0);	// r
	circle(data, 250, 150, r, 1, bright, 1, 0, 0);	// g
	circle(data, 336, 300, r, 2, bright, 1, 0, 0);	// b
 
	var bright = 0xff;
	circle(data, 664, 300, r, 0, bright, 2, 0, 0);	// r
	circle(data, 750, 150, r, 1, bright, 2, 1, 0);	// g
	circle(data, 836, 300, r, 2, bright, 2, 0, 1);	// b
 
	ctx.putImageData(imageData, 0, 0);
}
 
function circle(data, cx, cy, r, rgb, bright, step, u, v)
{
	var width = canvas.width;
	var rr = r * r;
 
	for (var y = -r; y < r; y += step) {
		for (var x = -r; x < r; x += step) {
			if (rr < x * x + y * y) continue;
			data[((cy + y + v) * width + (cx + x + u)) * 4 + rgb] = bright;
		}
	}
}
 
</script>
</body>
 

palette32.html
<!doctype html>
<head>
<title>palette32</title>
</head>
 
<body>
<p>
四角形のサイズ
<input id="inpSize" value="4">
<button onclick="draw();">描画</button>
</p>
<canvas id="canvas"></canvas>
<script>
 
var width = 800;
var height = 600;
var ra = 200;
var rb = 300;
var size;
var ctx = canvas.getContext("2d");
 
draw();
 
function draw()
{
	size = parseInt(inpSize.value);
	if (1 <= size) {
	} else {
		alert("1以上の数値を指定してください。");
		return;
	}
 
	canvas.width = width;
	canvas.height = height;
	ctx.fillStyle = "rgb(0, 0, 0)";
	ctx.fillRect(0, 0, width, height);
 
	circle("rgb(255, 0, 0)", 0, 0, 210);
	circle("rgb(0, 255, 0)", 1, 0, 90);
	circle("rgb(0, 0, 255)", 0, 1, 330);
}
 
function circle(color, u, v, angle)
{
	var rad = (angle / 180) * Math.PI;
	var cx = width / 2 + ra * Math.cos(rad);
	var cy = height / 2 - ra * Math.sin(rad);
	var rr = rb * rb;
	var s2 = size * 2;
 
	ctx.fillStyle = color;
	for (var y = size * v; y < height; y += s2) {
		var py = y - cy;
		for (var x = size * u; x < width; x += s2) {
			var px = x - cx;
			if (rr < px * px + py * py) continue;
			ctx.fillRect(x, y, size, size);
		}
	}
}
 
</script>
</body>
 
最終更新:2016年02月12日 18:37