duangsuse::Echo
#math 上面 ai.Xecades.xyz 的数字识别用了卷积网络:(另外 #life 我恢复了。明天交了页面就又继续修补JS最简解释器了,添加更多数据类型、解构、?句和表达式宏、中缀式 其中有一句 ab点积(移动做内点积就是卷积): let c = MatZeros(a.row, b.col),i,j,k; for (i = 0; i < a.row; i++) for (j = 0; j < b.col; j++) for (k = 0; k < a.col; k++) c.data[i][j]…
呃,我觉得这位和顶楼的工程式讲法比较好:
^”书上先反褶再平移,把输入信号当作一个整体(去翻转平移相乘积分),一次算出一个时间点的响应值;而楼主把信号拆开,一次算出一个信号在所有时间的响应值,再把各个信号相加。两者本质上是相同的。
顶楼:
令f(t=1) 衰减是种卷积,如t=1敲锣,锣面震幅随 tNow-1 衰减。接下来 1.2 ,1.4s 也有同样的敲锣。将它们叠起来就成了系统的输出
无论多么复杂的输入信号,我们都可以将其分解为一个个连续的冲激信号
用符号'*'表示卷积,关系式:输入*系统=输出。上面的图2在t=0.4s时的数值,是由图1中蓝、红、绿分别对应的3个单位冲激响应相加得来,
蓝、红、绿3个信号进入系统的时间分别为:t=0s,t=0.2s,t=0.4s,仔细观察,在图1中3个冲激信号对应系统响应的值分别为
系统响应在t=0.4s,t=0.2s,t=0s的值,对应的时间顺序刚好相反(因为.4s时0s 的还没消失),所以要翻转
😅不过有件好事:在计算机图形学 #cg 上 Sobel 边缘检测和各种锐化/平滑 都是无关方向的,如果只是 dot 乘积(各位之和) 其实就是普通列表处理;需要处理声音和图像不需要理解信号处理 #sp 学的术语概念
我想起了滑动平均拨弦声
https://tinyrave.com/tracks/67/remix
#js #code audio
在每个xy 叠加卷积核,就得到输出颜色/灰度 等信号
应用于位图参考 https://zhuanlan.zhihu.com/p/76606892
shadertoy.com/new #GLSL #code
lum滤镜 . 这次让我学会了位图擦拭渐变外 的边缘和模糊 以及边角画扭曲 💭视频粒子特效可能需要
我这里还有个中心模糊的:
#GLSL #code https://www.shadertoy.com/view/4ts3Ws
在输入信号的每个位置,叠加一个单位响应,就得到了输出信号。卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。
^”书上先反褶再平移,把输入信号当作一个整体(去翻转平移相乘积分),一次算出一个时间点的响应值;而楼主把信号拆开,一次算出一个信号在所有时间的响应值,再把各个信号相加。两者本质上是相同的。
顶楼:
令f(t=1) 衰减是种卷积,如t=1敲锣,锣面震幅随 tNow-1 衰减。接下来 1.2 ,1.4s 也有同样的敲锣。将它们叠起来就成了系统的输出
无论多么复杂的输入信号,我们都可以将其分解为一个个连续的冲激信号
用符号'*'表示卷积,关系式:输入*系统=输出。上面的图2在t=0.4s时的数值,是由图1中蓝、红、绿分别对应的3个单位冲激响应相加得来,
蓝、红、绿3个信号进入系统的时间分别为:t=0s,t=0.2s,t=0.4s,仔细观察,在图1中3个冲激信号对应系统响应的值分别为
系统响应在t=0.4s,t=0.2s,t=0s的值,对应的时间顺序刚好相反(因为.4s时0s 的还没消失),所以要翻转
😅不过有件好事:在计算机图形学 #cg 上 Sobel 边缘检测和各种锐化/平滑 都是无关方向的,如果只是 dot 乘积(各位之和) 其实就是普通列表处理;需要处理声音和图像不需要理解信号处理 #sp 学的术语概念
我想起了滑动平均拨弦声
https://tinyrave.com/tracks/67/remix
#js #code audio
kPluck = 470.0 ,当然音质差也可:
a = Array(44100 / kPluck >>0).fill(0);//FIFO frequency
a.forEach((x,i)=>a[i] = Math.random() * 2 - 1)//white noise
cyc=(a,i)=>i%a.length,
runAvg=f=>T=>{
let i=cyc(a,T*SAMPLE_RATE>>0); return a[i] = f(a[i], a[cyc(a,i+1)])
}
buildSample=runAvg((a,b)=>(a+b)/2)
kPluck = 470.0 ,卷积核就是权重,#AI 学习的正好是权重,把权叠到每片像素,所以图片分类器能学习出核的特征,对识别项求和后判断归类
a = Array(44100 / kPluck >>0).fill(0);
a.forEach((x,i)=>a[i] = Math.random() * 2 - 1)
buildSample=T=>{//没平均相邻
let i=T*SAMPLE_RATE %a.length >>0; return a[i] = a[i]/1.01
}
在每个xy 叠加卷积核,就得到输出颜色/灰度 等信号
应用于位图参考 https://zhuanlan.zhihu.com/p/76606892
shadertoy.com/new #GLSL #code
#define v1 float
v1 lumAt(vec2 p){
return dot(vec3(.2126, .7152, .0722),//亮度
texture(iChannel0, p.xy / iResolution.xy).rgb);
}
void mainImage(out vec4 bg, vec2 P){
vec4 c = texture(iChannel0, P / iResolution.xy);
v1 gx,gy, d = sin(iTime * 5.0)*0.5 + 1.5; // kernel offset
// Sobel Kernel
//x
// -1 -2 -1
// 0 0 0
// 1 2 1
//y
// -1 0 -1
// -2 0 -2
// -1 0 -1
#define k(x,y,P,a) v1(a)*lumAt(P+vec2(v1(x)*d,v1(y)*d))
gx=k(-1,-1, P,1) + k( 0,-1, P,2)
+k( 1,-1, P,1) + k(-1, 1, P,-1)
+k( 0, 1, P,-2) + k( 1, 1, P,-1);
gy=k(-1,-1, P,1) + k(-1, 0, P,2)
+k(-1, 1, P,1) + k( 1,-1, P,-1)
+k( 1, 0, P,-2) + k( 1, 1, P,-1);
v1 g = gx*gx + gy*gy;// denoise in the video
v1 g2 = g * (sin(iTime) / 2.0 + 0.5);
bg = c+ vec4(0.0, g, g2, 1.0);
}
lum滤镜 . 这次让我学会了位图擦拭渐变外 的边缘和模糊 以及边角画扭曲 💭视频粒子特效可能需要
我这里还有个中心模糊的:
#GLSL #code https://www.shadertoy.com/view/4ts3Ws
float amount = 5.9;
vec3 shadow(vec2 P){
return texture( iChannel0, .5*(sin(1.)+P) ).rgb;
}
void mainImage( out vec4 bg, vec2 P){
vec2 pC = -1.0 + 2.0 * P.xy / iResolution.xy, p = pC;
vec2 dCopy = (iMouse.xy/iResolution.xy - pC ) / amount;
vec3 g = vec3( 0.0 );
for(int i = 0; i < int( amount ); i++ ){
vec3 c = shadow(p);
g += smoothstep( 0.0, 1.0, c);
p += dCopy;
}
bg = vec4(g/ amount, 1.0 );
}
Zhihu
如何通俗易懂地解释卷积? - 知乎
有那么麻烦吗?不推荐用“反转/翻转/反褶/对称”等解释卷积。好好的信号为什么要翻转?导致学生难以理解…
duangsuse::Echo
http://amid.fish/karplus-strong #math #signal 对对,这就是我想要的那种博客 😭 #recommend 能改参数预览的那种 #video #tools 顺便: https://natrongithub.github.io/ 是开源的VFX合成台-目前只有Fedora 有打包,支持 ShaderToy.com GLSL 和 GMIC.eu ,可以在ghproxy下载 基于处理节点和关键帧动画,支持2D动追(可惜这类软件都不能从摄像头Input.. 😒 这个都支持…
https://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm #GLSL 这个也是
除了3D基本形的距离点集(SDF)计算,也有处理:对称平滑挖空扭曲、自2D、重复
设想屏幕中心是0,0 那四周点距-l 仍>0 就是在圆外
圆角的距离式是
P-L/2 把座标系放在画布中间,b=sqrt(L*.5) 时宽=半屏,看length 在左下角锁定一片区域。
step(length(p-l), 1) 是圆,为什么加 max(p,0))-l 就变矩形?max保证越圆心界后左下方向都是1,然后用abs 中心对称(欸讲不会
Shadertoy 加入是 Alt+Enter 测试^迷了
除了3D基本形的距离点集(SDF)计算,也有处理:对称平滑挖空扭曲、自2D、重复
圆=(p,l)=>length(p)-l;椭圆,钻石,圆锥,4点块=...
盒=(p,l)=>{ vec3 q = abs(p) - l;
return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0); }
平面=(p,n, h)=>dot(p,n)+h
线=(p,h,r)=>{p.y -= clamp( p.y, 0.0, h ); return length( p ) - r;}
圈=(p,t)=>return length(vec2(length(p.xz)-t.x,p.y))-t.y
设想屏幕中心是0,0 那四周点距-l 仍>0 就是在圆外
圆角的距离式是
length(max(abs(p)-b+r,0.0))-r把abs去掉,会发现这是一个中心对称形, max(0,p-b+r)
P-L/2 把座标系放在画布中间,b=sqrt(L*.5) 时宽=半屏,看length 在左下角锁定一片区域。
mix(,, smoothstep(0.0,1.0,res)
尖锐混合前/背景step(length(p-l), 1) 是圆,为什么加 max(p,0))-l 就变矩形?max保证越圆心界后左下方向都是1,然后用abs 中心对称(欸讲不会
Shadertoy 加入是 Alt+Enter 测试^迷了
iquilezles.org
Inigo Quilez
Articles on computer graphics, math and art
https://www.cnblogs.com/tkgamegroup/p/4214081.html 学习写新着色器 #GLSL
它可以模拟自然的云、火焰、水面等,为电影特效做出了功不可没的贡献,为此,他获得了“奥斯卡技术成就奖”。
Perlin噪声就是n个函数的叠加,这n个函数满足,下一个的频率是前一个的两倍,幅度是二分之一
对屏幕的像素分组。250*250个像素共享同一个随机值。然后,对于每个小组,每个小组里面的像素,进行一次插值:a+t(b-a) =(1-t)a+tb 。当然t速率推荐 3pow2-2pow3
2D插值:正和右在x方向插值得到a,然后是下和右下小组的值在x方向插值得到b,最后就是a和b在y方向插值得到最终结果。
glsl里面有预定义插值函数,线性的mix和平滑的smoothstep。
它可以模拟自然的云、火焰、水面等,为电影特效做出了功不可没的贡献,为此,他获得了“奥斯卡技术成就奖”。
Perlin噪声就是n个函数的叠加,这n个函数满足,下一个的频率是前一个的两倍,幅度是二分之一
对屏幕的像素分组。250*250个像素共享同一个随机值。然后,对于每个小组,每个小组里面的像素,进行一次插值:a+t(b-a) =(1-t)a+tb 。当然t速率推荐 3pow2-2pow3
2D插值:正和右在x方向插值得到a,然后是下和右下小组的值在x方向插值得到b,最后就是a和b在y方向插值得到最终结果。
glsl里面有预定义插值函数,线性的mix和平滑的smoothstep。
void mainImage(out vec4 bg,vec2 P0){vec2 P=P0/r;
float t=iTime/1.5,
a = fbm(P-vec2(sin(t*3.)*5.,t*10.)), //调整火焰层位置
b = fbm(P-t*6.),
cc = fbm(P-vec2(1.-sin(t*4.)*5.,t*8.));
vec3[] c = vec3[](vec3(1.0, 0.9, 0.0),vec3(1.0, 0.0, 0.0), );
//bg = vec4(mix(c[1], c[0], a) + mix(c[2], c[3], b) - mix(c[4],c[5], cc), 1.0);
bg=vec4(mix(fbm(P),noise(P), P0.x>iMouse.x? 1.:0. ));
Cnblogs
[GLSL]着色器周记02——火焰特效 - tkgamegroup - 博客园
这周学了好多。包括伪随机数。柏林噪声。先说伪随机数。伪随机数我们用的是周期函数而不是那种由前一项乘一个超大的数取余数的方法。使用周期函数的好处就是可以让其随时间均匀变化。不过使用周期函数一定要保证周期
#learn #math #signal 编程里处处是”速率“曲线:两点xy轴位移/颜色盘渐变、下落的重力速度、弹球的碰边反馈 。程序负责投喂边界情况(关键帧),可重绘计算谁做?浮点函数0.0。
看起来非常 fancy 的效果,原理却非常简单。 jQuery 的 swing 缓动即 sin(t)/2+0.5 ,t=0~1,将原 x(0~2pi)y(-1~1) 缩小平移到 y(0~1)
正余弦(co?sine)是手画圆时的xy。180deg=1pi 弧度(rad),随弧度t(0=12点方向)上升而圆心距y上升。sin与x=0轴在2pi的周期有3个交点,正好是画笔竖线能连圆心的弧度:0,180,360deg; 0,1pi,2pi rad 。0~1pi间俩山坡式的波动、与cos(t) 变化率的互补也揭示了1/4圆的对称性,完美的图形。 物理 x=.25pi 时 sinx+cosx 动量和最大表明 45deg 投掷距离最长(请玩 funcplot.com
最常使用的是一些缓动(非线性)动画,它们把 t=0~1 重新分配,一些部位停留(ease)更长,Web 使用的是3次方贝兹(cubic bezier)-由4点组成自由调整的1段线,
在2折线(A形)上,p0~p1 生成1点T0,T0~T(p1~p2) 生成当前t的点T2,此点构线是平滑的曲线。
与之同类的 NURBS 曲面替代三/四角面点阵(Mesh)广泛应用于3D建模
修复开头的
点参数式 (2sint,cost) t=0~2pi 绘制一个宽椭圆,隐函数 length(p-P)-l 的符号表明P 离圆心p的距离,=0时是圆的边(stroke),<0是圆的色(fill),-l 是圆心p ,在散点并行计算 #GLSL 里称为 signed dist func
计算有许多种写法,f(t)/2+.5 即 (f(t)+1)/2 , P(x,y) plusRL=x+lsinr,y+lcosr (r=0~2pi)可以写成 vec2(x,y)+l*rotate(r) 的形式, for(i in 1..3)acc*=5 可以写成 pow(5,3) 即 5**3 ,acc+=i*3+1 求和可拆为 3+6+9+1*3 即 (1~3).reduce{a*b}*3+3 的阶乘倍数,积之和:多项等式可写明正负号,移项, wx+w1x1 即 dot((w,x),(w1,x1)) ,移动的加权求和就是卷积(convolve)
声音是线(采样率npSec,声道量nChan,dtype,n)、像素图也可按函数的方法过滤RGB值通道(channel),求亮度灰度(lum)、边缘检测,通过窗口(window)模糊锐化
图片也是信号,听起来很奇怪,因为图片有2D宽度有xy座标,怎么能线性处理?确实,信号处理有 1D 2D 之分,一些算式(2D Sobel边缘,正右下右平滑补间,平面几何)是特有的,但xy座标也=rl圆心座标,哈哈镜扭曲和漩涡扭曲 ,也是信号-xy之上也有曲线。
声音和图形都能“混成(mix)”,使用的数学式都是对每采样像素/震点 (a+b) ,并且都有 High/Band/Low-Pass-Filter 区间滤波,线条主宰着图像的处理和绘制
波形是震子的震幅y随时间x的变化,既是震动就有周期T.f(x)=f(x+T),f=sin或cos则T=2pi。周期小频率快音高大、幅度高能量大响度大,白噪声是包含所有频谱的信号,用于模拟自然烟雾水流的 Perlin noise
画家算法(左面 -zy轴远先近后)用正交投影在2D画布上绘制3D点集,可以在y轴旋转每点(面向xz平面:x=xcosr+zsinr,y=y)
xy点的连线路径也不例外,我们给Path2D加一个t=”z深“维度。3D版sin波从 正面xy 看起来像一个圆,而从 左侧面zy 它就像普通sin线。手绘都近似圆圈,只是在某一个t 其y比正弦波加了点小波动,从 顶面zx 看x也同样,把这个随t+移动而不像sin螺旋了的画笔变成不同频率和幅度sin的叠加,每个 sin 就是”小圆圈“
物理命名法已经能按a-z的编号层叠标注所有变量的性质, 使我能更好的提出子程序、更改API
我更喜欢从集合(如UI父元素,容器)而非单项的视角编程,能通过举例边角情况理解从计算反着来的性质过滤,计算机也可以接受 sympy.org 不直的计算;就像编译原理能通过位置综合推导/检查型参、位置统一分配变量名、自动回调+函断续实现async
计算机的能力从来不是“单向” “单次”的。它与计算器有别
我看到了比无UI的API,更有趣的东西,它们才完成了真正的实事,不停留在一两个技术名词。系统的,反而易懂
有别于单次调用的设计,才会更好玩不是吗
回望当初,为一些能自动代码生成的模板而敲键盘、为绑定utils 而写UI, #Web 真的教会了我太多,从元编程、GUI的架构到编译原理和计算器的关系,到人脸识别的数据、canvas,WebAudio与WebGL 乃至WASM跨平台,这是 Python 的单一API 甚至 Java 等要操心F5刷新外无聊鼠标的语言所不能给我的。从那些C一样的语言我只看到了语法模式和API名词,而从Web我找到了开发的实质—写前就知道算法结果是啥样
看起来非常 fancy 的效果,原理却非常简单。 jQuery 的 swing 缓动即 sin(t)/2+0.5 ,t=0~1,将原 x(0~2pi)y(-1~1) 缩小平移到 y(0~1)
正余弦(co?sine)是手画圆时的xy。180deg=1pi 弧度(rad),随弧度t(0=12点方向)上升而圆心距y上升。sin与x=0轴在2pi的周期有3个交点,正好是画笔竖线能连圆心的弧度:0,180,360deg; 0,1pi,2pi rad 。0~1pi间俩山坡式的波动、与cos(t) 变化率的互补也揭示了1/4圆的对称性,完美的图形。 物理 x=.25pi 时 sinx+cosx 动量和最大表明 45deg 投掷距离最长(请玩 funcplot.com
最常使用的是一些缓动(非线性)动画,它们把 t=0~1 重新分配,一些部位停留(ease)更长,Web 使用的是3次方贝兹(cubic bezier)-由4点组成自由调整的1段线,
animation:1s
固定P0=0,P1=1 能调P1,P2 两点。而绘制里常见2次方(quadratic)贝兹是3点xy共同插值式—bzr=(ps,t)=>{let T=([x,y],[x1,y1])=>[x+t*(x1-x),y+t*(y1-y)] //lerp(mix ab@t). N次方 de Casteljau 法3点够2折线。在1折线上 T(p0,p1) 即"lerp" 定义了补间xy: a+t(b-a) 即 (1-t)a+tb ,想象a是电池的绿条,会慢慢下滑。xy轴t=0~1的滑动即运动轨迹。 采样N点的封闭路径构成几何,等位点T(a[i],b[i]) 补间即形变(morph)
return n(ps)==1?ps[0] : bzr(ps.slice(0,-1).map((x,i)=>T(x,ps[i+1]) ),t) //所有左的P都*t 至Plast
}
在2折线(A形)上,p0~p1 生成1点T0,T0~T(p1~p2) 生成当前t的点T2,此点构线是平滑的曲线。
bzr(ps,t)
里 ~(p0~p2, p1~p2) 先将p2连另两点得两T点,即降为1次bez,插值p01两点即得2次贝兹曲线t% 路程的xy。几何计算一般可缓存与之同类的 NURBS 曲面替代三/四角面点阵(Mesh)广泛应用于3D建模
修复开头的
swing=(1+ 0-cos(x*pi))/2
或 (1-sin((.5+x)*pi))/2
或(1-sin(xpi-11))/2
,因为y(0)=0且 0~1 间曲线应是单调增。cos(0)是1 但其0~pi 正好符合单调减,无需x+?。sin(.5pi*x)
是个缓出曲线点参数式 (2sint,cost) t=0~2pi 绘制一个宽椭圆,隐函数 length(p-P)-l 的符号表明P 离圆心p的距离,=0时是圆的边(stroke),<0是圆的色(fill),-l 是圆心p ,在散点并行计算 #GLSL 里称为 signed dist func
计算有许多种写法,f(t)/2+.5 即 (f(t)+1)/2 , P(x,y) plusRL=x+lsinr,y+lcosr (r=0~2pi)可以写成 vec2(x,y)+l*rotate(r) 的形式, for(i in 1..3)acc*=5 可以写成 pow(5,3) 即 5**3 ,acc+=i*3+1 求和可拆为 3+6+9+1*3 即 (1~3).reduce{a*b}*3+3 的阶乘倍数,积之和:多项等式可写明正负号,移项, wx+w1x1 即 dot((w,x),(w1,x1)) ,移动的加权求和就是卷积(convolve)
声音是线(采样率npSec,声道量nChan,dtype,n)、像素图也可按函数的方法过滤RGB值通道(channel),求亮度灰度(lum)、边缘检测,通过窗口(window)模糊锐化
图片也是信号,听起来很奇怪,因为图片有2D宽度有xy座标,怎么能线性处理?确实,信号处理有 1D 2D 之分,一些算式(2D Sobel边缘,正右下右平滑补间,平面几何)是特有的,但xy座标也=rl圆心座标,哈哈镜扭曲和漩涡扭曲 ,也是信号-xy之上也有曲线。
声音和图形都能“混成(mix)”,使用的数学式都是对每采样像素/震点 (a+b) ,并且都有 High/Band/Low-Pass-Filter 区间滤波,线条主宰着图像的处理和绘制
波形是震子的震幅y随时间x的变化,既是震动就有周期T.f(x)=f(x+T),f=sin或cos则T=2pi。周期小频率快音高大、幅度高能量大响度大,白噪声是包含所有频谱的信号,用于模拟自然烟雾水流的 Perlin noise
画家算法(左面 -zy轴远先近后)用正交投影在2D画布上绘制3D点集,可以在y轴旋转每点(面向xz平面:x=xcosr+zsinr,y=y)
xy点的连线路径也不例外,我们给Path2D加一个t=”z深“维度。3D版sin波从 正面xy 看起来像一个圆,而从 左侧面zy 它就像普通sin线。手绘都近似圆圈,只是在某一个t 其y比正弦波加了点小波动,从 顶面zx 看x也同样,把这个随t+移动而不像sin螺旋了的画笔变成不同频率和幅度sin的叠加,每个 sin 就是”小圆圈“
物理命名法已经能按a-z的编号层叠标注所有变量的性质, 使我能更好的提出子程序、更改API
我更喜欢从集合(如UI父元素,容器)而非单项的视角编程,能通过举例边角情况理解从计算反着来的性质过滤,计算机也可以接受 sympy.org 不直的计算;就像编译原理能通过位置综合推导/检查型参、位置统一分配变量名、自动回调+函断续实现async
计算机的能力从来不是“单向” “单次”的。它与计算器有别
我看到了比无UI的API,更有趣的东西,它们才完成了真正的实事,不停留在一两个技术名词。系统的,反而易懂
有别于单次调用的设计,才会更好玩不是吗
回望当初,为一些能自动代码生成的模板而敲键盘、为绑定utils 而写UI, #Web 真的教会了我太多,从元编程、GUI的架构到编译原理和计算器的关系,到人脸识别的数据、canvas,WebAudio与WebGL 乃至WASM跨平台,这是 Python 的单一API 甚至 Java 等要操心F5刷新外无聊鼠标的语言所不能给我的。从那些C一样的语言我只看到了语法模式和API名词,而从Web我找到了开发的实质—写前就知道算法结果是啥样
developer.mozilla.org
高级动画 - Web API 接口参考 | MDN
在上一章,我们制作了基本动画以及逐步了解了让物件移动的方法。在这一部分,我们将会对运动有更深的了解并学会添加一些符合物理的运动以让我们的动画更加高级。
duangsuse::Echo
#WIP 作者正在学习傅里叶变换 😓 感谢xecades大佬的博客。 实在不好在tg打太长的草稿。 语言有问题请大家积极报告 今天本来说还得写篇文评知乎民科的,以及提纲2月的动画礼物(草 话说xecades大佬居然真的是用 offset-path 来获取SVG折线点……天哪,我还以为不能呢,offsetLeft 好像确实变了,当时我以为不能(忘记为啥了)就找到了 SVGPath 的 TotalLen/PointAtLen (这里Xe顺带 -W/2 居中了一下,style里0点也加上了。transferSVG…
感觉自己没资格教Xe做事🤪。 其实理论正确了,程序曲折一点也OK,只要能工作就好,Xe用d3的JQ功能和CSS 做好像也OK,只是形式有点冗,数学式是没问题的,而且他还写过canvas 版本,性能比我高10倍.. 什么鬼,他只是写了正常的代码,甚至用了[]负索引,我稍微换了点私货-虚数变向量,居然会变慢?
而且把原版换成向量,没变慢多少?
Xe还是高三呢,理论对就不打扰他了,看起来我的代码也该修改😱
我这个版本用了太多元编程和eval,画个画都搞出(我不想重复xy传参..)
怎么转一圈就耗这么长时间?我直接给xy平铺在[]好了!
我不用向量改 J(i=>a[i]+b[i])好了,也不用 svgPoint()=t=> 这种鸡肋的方式混淆计算和DOM测量了 😭 看来浏览器开发不考虑计算分块不行啊
而且把原版换成向量,没变慢多少?
Xe还是高三呢,理论对就不打扰他了,看起来我的代码也该修改😱
我这个版本用了太多元编程和eval,画个画都搞出(我不想重复xy传参..)
连线=(a,b)=>画(a,2,0,DEG,'Farc', b,'Sline', a.dup.m(b).l,0,DEG,'Sarc')
这种“DSL”… 很明显,运行时较大开销,那[Vec2,] 和无法内联的复制就更不用说了。在 #GLSL 里你可以随便上vec2[] 矩阵,JS 里可不敢说0开销抽象。 😭怎么转一圈就耗这么长时间?我直接给xy平铺在[]好了!
我不用向量改 J(i=>a[i]+b[i])好了,也不用 svgPoint()=t=> 这种鸡肋的方式混淆计算和DOM测量了 😭 看来浏览器开发不考虑计算分块不行啊
#dev 很希望同好们也能重视下代码语义的明确性,不要因为自己算法或应用上身经百战了就相信实现不可优化了,思想和表达同样重要—不写字不默念能让智商降低
语言是无关编译原理的,常量字面/参数局部、.[]()链、表达式、语句块{}、大定义语法;分清这些层次还是有些帮助的,
就不会怀疑改了会不能运行,而元编程(代码生成CGen等)就更重要了
或许你没受过CGen的好,但一定遭过Java界无默认值框架的罪,这种问题性垄断就是程序员视此技巧为“绝技”而无视其他指标的单独使用造成的
语言比数学更适合提升编程功底,无论你做UI、网络、数据处理、数学,编程语言就是描述问题和解法的途径,最佳途径。如果它是你的母语,能帮助解决很多问题,比只在纸面上解决有意思太多了, desmos.com 和 funcplot.com 就能图示许多数学函数,而 shadertoy.com 展示了它们的多彩用途,这些都是在辅佐代码;语言和运行时是 1:N 关系,C++和Java 都可在JS里运行 ,C 也有 cling,cint 等(FFI)解释器,编译和解释并不重要,语言就是定义模型和解法的素材。
我当年的 ParserKt 是3门语言整整重构了9个版本啊,许多做法我都用不同的语言表达过,所以能分清「X语言语法」和「语义」两个看起来如语音和文字一样完全相同的东西
如果没有这样的契机,或许我现在的代码还是似是其非、语义空泛的吧,也就不会和绘图那么合贴了—在 #GLSL 里,居中点可用 xy+wh/2 , 点居中可 xy-wh/2 ,一个正负号的问题,换个写法 width,height 啥的就不明确了,好像几百行定义就必须,其实根本不!换个语序,许多东西才能合起来,变得不奇异
学过初中物理的人还会写冗余代码吗?数学高分也会写烂代码吗?会!所以人真的要一直改正才行啊。
语言是无关编译原理的,常量字面/参数局部、.[]()链、表达式、语句块{}、大定义语法;分清这些层次还是有些帮助的,
就不会怀疑改了会不能运行,而元编程(代码生成CGen等)就更重要了
或许你没受过CGen的好,但一定遭过Java界无默认值框架的罪,这种问题性垄断就是程序员视此技巧为“绝技”而无视其他指标的单独使用造成的
语言比数学更适合提升编程功底,无论你做UI、网络、数据处理、数学,编程语言就是描述问题和解法的途径,最佳途径。如果它是你的母语,能帮助解决很多问题,比只在纸面上解决有意思太多了, desmos.com 和 funcplot.com 就能图示许多数学函数,而 shadertoy.com 展示了它们的多彩用途,这些都是在辅佐代码;语言和运行时是 1:N 关系,C++和Java 都可在JS里运行 ,C 也有 cling,cint 等(FFI)解释器,编译和解释并不重要,语言就是定义模型和解法的素材。
我当年的 ParserKt 是3门语言整整重构了9个版本啊,许多做法我都用不同的语言表达过,所以能分清「X语言语法」和「语义」两个看起来如语音和文字一样完全相同的东西
如果没有这样的契机,或许我现在的代码还是似是其非、语义空泛的吧,也就不会和绘图那么合贴了—在 #GLSL 里,居中点可用 xy+wh/2 , 点居中可 xy-wh/2 ,一个正负号的问题,换个写法 width,height 啥的就不明确了,好像几百行定义就必须,其实根本不!换个语序,许多东西才能合起来,变得不奇异
学过初中物理的人还会写冗余代码吗?数学高分也会写烂代码吗?会!所以人真的要一直改正才行啊。
Leaning Technologies
C/C++ to WebAssembly Compiler | Cheerp | Leaning Technologies
Cheerp is the enterprise-grade C/C++ compiler for the Web and can compile C/C++ into WebAssembly and JavaScript. Download Cheerp today.
#zhihu #python #code https://www.zhihu.com/question/430688755/answer/2344167773
https://www.cnblogs.com/ruhai/p/10820578.html
#algorithm 快速排序把列表二分至仅1项,分前先以大小移位partition ;合并排序也分至仅1项,完后保持有序 merge 。分别是基于 partition 1->N 和 merge N->1 子集分治法
读取次数O(nlogn) ,n 是每拆分层项数, log n 是层数(如4=分2层)
还有些算法推荐大家了解: Delauny三角剖分, MST树,kD树 . #GLSL 上面也有一些
https://zhuanlan.zhihu.com/p/375542978
https://zhuanlan.zhihu.com/p/42331420 #opencv Subdiv2D
https://www.cnblogs.com/ruhai/p/10820578.html
#algorithm 快速排序把列表二分至仅1项,分前先以大小移位partition ;合并排序也分至仅1项,完后保持有序 merge 。分别是基于 partition 1->N 和 merge N->1 子集分治法
读取次数O(nlogn) ,n 是每拆分层项数, log n 是层数(如4=分2层)
还有些算法推荐大家了解: Delauny三角剖分, MST树,kD树 . #GLSL 上面也有一些
https://zhuanlan.zhihu.com/p/375542978
https://zhuanlan.zhihu.com/p/42331420 #opencv Subdiv2D
Zhihu
如何理解「The Zen of Python」? - 知乎
Tim Peters(Timsort作者) 就是说要写优美的代码,要拒绝隐晦、过度复杂、或简洁的凌乱,拥抱明了、简单、…
#dalao https://t.me/hyi0618/4123
今天看到 Eric Zhang 的简历令我震惊 https://www.ekzhang.com/resume
学术上:
在哈佛读 A.B. in Computer Science and Mathematics 和 S.M. in Computer Science 双硕士学位,以优异成绩毕业,获得该领域最高荣誉
参与教学,并获得多个教学证书;各种研究均有论文发表。
工作上:
创业公司 Modal 的创始人之一。在多家硅谷科技公司公司工作过,包括 Nvidia 的实习经历。工作所使用的语言包括 C++, Rust, Python, Go, JavaScript (Svelte)。从底层基础设施到上层应用构建都有涉及。
开源上:
有多个热门开源项目,包括 sshx (5000 stars), Bore (8000 stars), Rustpad (3000 stars), Graphics Workshop (2000 stars), 还有十来个几百 stars 的项目。这些项目都有很好的代码质量,和 UI 上的克制审美。
https://www.ekzhang.com/graphics-workshop/ #glsl
Eric Zhang 真的颠覆了我的认知,第一次见到这般学术极其优异又开发能力很强,还非常年轻的人。除了佩服还是佩服,甚至没有任何对比和忌妒的想法,这样的人的存在就像火炬一样,让我保持自己的要求,坚定自己的追求,始终学习和进步。
今天看到 Eric Zhang 的简历令我震惊 https://www.ekzhang.com/resume
学术上:
在哈佛读 A.B. in Computer Science and Mathematics 和 S.M. in Computer Science 双硕士学位,以优异成绩毕业,获得该领域最高荣誉
参与教学,并获得多个教学证书;各种研究均有论文发表。
工作上:
创业公司 Modal 的创始人之一。在多家硅谷科技公司公司工作过,包括 Nvidia 的实习经历。工作所使用的语言包括 C++, Rust, Python, Go, JavaScript (Svelte)。从底层基础设施到上层应用构建都有涉及。
开源上:
有多个热门开源项目,包括 sshx (5000 stars), Bore (8000 stars), Rustpad (3000 stars), Graphics Workshop (2000 stars), 还有十来个几百 stars 的项目。这些项目都有很好的代码质量,和 UI 上的克制审美。
https://www.ekzhang.com/graphics-workshop/ #glsl
Eric Zhang 真的颠覆了我的认知,第一次见到这般学术极其优异又开发能力很强,还非常年轻的人。除了佩服还是佩服,甚至没有任何对比和忌妒的想法,这样的人的存在就像火炬一样,让我保持自己的要求,坚定自己的追求,始终学习和进步。
Telegram
yihong0618 和朋友们的频道
今天看到 Eric Zhang 的简历令我震惊 https://www.ekzhang.com/resume
学术上:
在哈佛读 A.B. in Computer Science and Mathematics 和 S.M. in Computer Science 双硕士学位,以优异成绩毕业,获得该领域最高荣誉 (Graduated magna cum laude, with highest honors in field.)。在校期间就参与教学,并获得多个教学证书;各种研究均有论文发表。
工作上:…
学术上:
在哈佛读 A.B. in Computer Science and Mathematics 和 S.M. in Computer Science 双硕士学位,以优异成绩毕业,获得该领域最高荣誉 (Graduated magna cum laude, with highest honors in field.)。在校期间就参与教学,并获得多个教学证书;各种研究均有论文发表。
工作上:…