在CircuitPython中创建火焰动画,通过两个简单噪声函数来调节色调和亮度。
https://github.com/Factoid/SimplexNoise
在CircuitPython中创建火焰动画
- shaoziyang
- 帖子: 3967
- 注册时间: 2019年 10月 21日 13:48
Re: 在CircuitPython中创建火焰动画
参考程序
Code: Select all
# Python implementation of simplex noise, based on this implementation:
# https://github.com/SRombauts/SimplexNoise/blob/master/references/SimplexNoise.java
# Original code by Stefan Gustavson
# Port by Adrian Cheater (c 2021)
# This code is licened LGPL
from math import *;
p = [151,160,137,91,90,15,
131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,
190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,
88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,
77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,
102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,
135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,
5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,
223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,
129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,
251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,
49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,
138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180]
perm = p*2;
permMod12 = [i % 12 for i in perm]
F2 = 0.5*(sqrt(3.0)-1.0)
G2 = (3.0-sqrt(3.0))/6.0
F3 = 1.0/3.0
G3 = 1.0/6.0
F4 = (sqrt(5.0)-1.0)/4.0
G4 = (5.0-sqrt(5.0))/20.0
class Grad:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
grad3 = [Grad(1,1,0),Grad(-1,1,0),Grad(1,-1,0),Grad(-1,-1,0),
Grad(1,0,1),Grad(-1,0,1),Grad(1,0,-1),Grad(-1,0,-1),
Grad(0,1,1),Grad(0,-1,1),Grad(0,1,-1),Grad(0,-1,-1)]
def dot( g, x, y ):
return g.x*x + g.y*y
def fastfloor(x):
xi = int(x)
if x<xi:
return xi-1
else:
return xi
def noise(xin, yin):
s = (xin+yin)*F2
i = fastfloor(xin+s)
j = fastfloor(yin+s)
t = (i+j)*G2
X0 = i-t
Y0 = j-t
x0 = xin-X0
y0 = yin-Y0
if(x0>y0):
i1=1
j1=0
else:
i1=0
j1=1
x1 = x0 - i1 + G2
y1 = y0 - j1 + G2
x2 = x0 - 1.0 + 2.0 * G2
y2 = y0 - 1.0 + 2.0 * G2
ii = i & 255;
jj = j & 255;
gi0 = permMod12[ii+perm[jj]];
gi1 = permMod12[ii+i1+perm[jj+j1]];
gi2 = permMod12[ii+1+perm[jj+1]];
t0 = 0.5 - x0*x0-y0*y0
if(t0<0):
n0 = 0.0;
else:
t0 *= t0
n0 = t0 * t0 * dot(grad3[gi0], x0, y0)
t1 = 0.5 - x1*x1-y1*y1
if(t1<0):
n1 = 0.0
else:
t1 *= t1
n1 = t1 * t1 * dot(grad3[gi1], x1, y1)
t2 = 0.5 - x2*x2-y2*y2
if(t2<0):
n2 = 0.0
else:
t2 *= t2
n2 = t2 * t2 * dot(grad3[gi2], x2, y2)
return 70.0 * (n0 + n1 + n2)
-
- 随机主题
- 回复总数
- 阅读次数
- 最新文章
-
- 8回复总数
- 951 阅读次数
- 最新文章 由 zhoukang8888
2023年 11月 24日 19:41
-
- 8回复总数
- 1035 阅读次数
- 最新文章 由 zhoukang8888
2023年 11月 25日 19:36
-
- 7回复总数
- 1032 阅读次数
- 最新文章 由 zhoukang8888
2023年 11月 26日 19:51