"프로그램으로 고사리 그리기"를 JavaScript + Canvas로 그리기
출력 결과
소스 코드
index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Draw leaves of the fern by a program</title>
</head>
<body>
<h1>Draw leaves of the fern by a program</h1>
<canvas id="fern"></canvas>
<input type="text" value="Data URL Here" id="data-url">
<script src="index.js"></script>
</body>
</html>
index.js
(function () {
// Constants
var
// size of canvas#fern
WIDTH = 500,
HEIGHT = 500;
// Functions
var
lambda = function lambda(expr) {
return Function(
'x, y',
'return ' + expr + ';');
},
W1x = lambda('0.836 * x + 0.044 * y'),
W1y = lambda('-0.044 * x + 0.836 * y + 0.169'),
W2x = lambda('-0.141 * x + 0.302 * y'),
W2y = lambda('0.302 * x + 0.141 * y + 0.127'),
W3x = lambda('0.141 * x - 0.302 * y'),
W3y = lambda('0.302 * x + 0.141 * y + 0.169'),
W4x = lambda('0'),
W4y = lambda('0.175337 * y');
function points(k, x, y, callback) {
if (0 < k) {
points(k - 1, W1x(x, y), W1y(x, y), callback);
if (Math.random() < 0.3)
points(k - 1, W2x(x, y), W2y(x, y), callback);
if (Math.random() < 0.3)
points(k - 1, W3x(x, y), W3y(x, y), callback);
if (Math.random() < 0.3)
points(k - 1, W4x(x, y), W4y(x, y), callback);
} else {
callback(~~(x * (WIDTH - 10) + WIDTH / 2), ~~(HEIGHT - y * (HEIGHT - 10)));
}
}
// Main
var
N = 20,
CANVAS_ID = 'fern',
DATA_URL_ID = 'data-url',
COLOR = [0x00, 0x80, 0x00, 0xff];
function initCanvas(canvas) {
canvas.width = WIDTH;
canvas.height = HEIGHT;
return canvas;
}
var
canvas = initCanvas(document.getElementById(CANVAS_ID)),
ctx = canvas.getContext('2d'),
imgData = ctx.createImageData(WIDTH, HEIGHT);
points(N, 0, 0, function callback(x, y) {
var
idx = y * WIDTH * 4 + x * 4;
imgData.data[idx + 0] = COLOR[0];
imgData.data[idx + 1] = COLOR[1];
imgData.data[idx + 2] = COLOR[2];
imgData.data[idx + 3] = COLOR[3];
});
ctx.putImageData(imgData, 0, 0);
document.getElementById(DATA_URL_ID).value = canvas.toDataURL();
})();
Python 버전의 소스 코드를 JavaScript로 다시 작성한 것 같은 느낌이므로 왜인가
lambda
라든지 있습니다. 뭔가 다른 것 같아요.그건 그렇고
공개해 두었으므로, 여가 시간에도 열어 보세요.
Draw leaves of the fern by a program
난수 사용하고 있으므로, 얇은 고사리가 되거나 굵어지거나 합니다.
그리고 DataURL로 출력할 수 있습니다.
Reference
이 문제에 관하여("프로그램으로 고사리 그리기"를 JavaScript + Canvas로 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/alucky0707/items/ada6514d6068fdff2a8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)