duangsuse::Echo
412 subscribers
3.85K photos
105 videos
574 files
5.14K links
duangsuse技术相干订阅
这是 @duangsuse 与技术有关的发布频道
duangsuse 的另外有 throws 闲杂频道
@dsuset
转载频道 @dsusep
duangsuse 有coding,github,gitlab帐号和bilibili帐号

极小可能会有批评zf的消息 如有不适可以退出

suse的小站:https://piped.stream
ps 另有别名 popf.rip
ʕ•̀ω•́ʔ✧ 🐶🍎🏠生死🐜
(>ω<)岂因祸福避趋之 一鿕
Download Telegram
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
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 ,
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
}

卷积核就是权重,#AI 学习的正好是权重,把权叠到每片像素,所以图片分类器能学习出核的特征,对识别项求和后判断归类
在每个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 );
}
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、重复

圆=(p,l)=>length(p)-l;
盒=(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
椭圆,钻石,圆锥,4点块=...

设想屏幕中心是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 测试^迷了
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。

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. ));
#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段线,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 法
return n(ps)==1?ps[0] : bzr(ps.slice(0,-1).map((x,i)=>T(x,ps[i+1]) ),t) //所有左的P都*t 至Plast
}

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)

在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我找到了开发的实质—写前就知道算法结果是啥样
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传参..) 连线=(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.comfuncplot.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 啥的就不明确了,好像几百行定义就必须,其实根本不!换个语序,许多东西才能合起来,变得不奇异

学过初中物理的人还会写冗余代码吗?数学高分也会写烂代码吗?会!所以人真的要一直改正才行啊。
#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
#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 真的颠覆了我的认知,第一次见到这般学术极其优异又开发能力很强,还非常年轻的人。除了佩服还是佩服,甚至没有任何对比和忌妒的想法,这样的人的存在就像火炬一样,让我保持自己的要求,坚定自己的追求,始终学习和进步。