프랙탈로 나무 쓰기
7651 단어 CoffeeScript
개념
코드
주의: 늘이는 길이, 각도에 난수가 들어 있음
{sin, cos, PI} = Math
drawLine = (ctx, p1, p2) ->
ctx.beginPath();
ctx.strokeStyle = 'gray'
ctx.moveTo(p1.x, p1.y);
ctx.lineTo(p2.x, p2.y);
ctx.stroke();
drawTree = (
ctx # canvas context
x1, y1 # position
len # length of node
stand # current dir
depth # recursion count
) ->
rl = Math.abs(0.5 - Math.random()) * len
x2 = x1 + rl * cos(stand)
y2 = y1 + rl * sin(stand)
drawLine(ctx, {x: x1, y: y1}, {x: x2, y: y2})
if depth > 0
diffdir = Math.random() * PI / 6
drawTree(ctx, x2, y2, len, stand + diffdir, depth-1)
drawTree(ctx, x2, y2, len, stand - diffdir, depth-1)
window.addEventListener 'load', ->
canvas = document.createElement 'canvas'
canvas.width=800
canvas.height=600
document.body.appendChild(canvas)
ctx = canvas.getContext('2d')
for x in [1..30]
drawTree(ctx, 600*Math.random(), 400*Math.random(), 20, -PI/2, 8)
결과
Reference
이 문제에 관하여(프랙탈로 나무 쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mizchi/items/96d011a1fceefc06cba3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)