Aad*_*hah 4 javascript algorithm graphics canvas logo-lang
我昨天刚刚了解了Logo.出生于九十年代,我以前从未见过它.所以我开始使用由Joshua Bell编写的在线Logo解释器,我决定编写一个circle
函数来制作同心圆.这就是我写的:
cs
to circle
penup forward :radius right 90
pendown repeat 360 [forward 3.14 * :radius / 180 right 1]
penup left 90 back :radius pendown
end
make "radius 30
repeat 160 [circle make "radius :radius + 30]
Run Code Online (Sandbox Code Playgroud)
有趣的是,绘图画布是环形阵列.因此,圆圈最终重叠.通过绘制160个同心圆,半径增加到30的倍数,我最终获得了这样的图像:
这真是令人惊讶.乍一看,它看起来像一张真实的夜空照片,它让我思考 - 是否有一种绘制星空的通用算法?
顺便说一句,如果你仔细观察,你可以看到30 x 30
像素正方形的网格.边界是黑色的,所以有点难以注意到.
执行星空的常规方法是在x/y平面中随机选择点,在psuedocode中类似于:
fill image with black
for (however many stars you want)
x = random() * width
y = random() * height
plot star at position x,y
loop
Run Code Online (Sandbox Code Playgroud)
如果你想获得幻想,你也可以用随机亮度绘制星星.还要记住,星星会略微闪烁,所以如果你正在做动画,那么每帧改变亮度可以使它们看起来更逼真.
作为矮人要塞的狂热玩家,我会选择分形公式来生成星星.在我看来,计算机随机是不够好的.再次借用DF游戏,我会添加各种步骤来增强星空,例如随机化形状,颜色,大小,发光,星团(有意添加一团星星).
如果你想与现实主义,也模拟气体背景.空间不是纯黑色背景上的白点.
最后,我建议你得到一些空间图像(来自我们的老朋友哈勃望远镜)并尽可能忠实地复制它.然后玩参数来达到你的喜好(也许你想要制作一个游戏).
PS:我没有指定任何编码语言,因为我认为它不是关于代码的问题(它非常基本),而是设计问题.您WOULD做在Flash /的Actionscript比Java这更简单的,相信我.