duangsuse::Echo
712 subscribers
4.24K photos
127 videos
583 files
6.45K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from Solidot
腾讯视频修改搏击俱乐部的结局

2022-01-24 19:55

国内流视频网站删减影视剧的做法由来已久,但直接修改原版视频的结局做法可能是闻所未闻的。据社交媒体用户报告,腾讯视频被发现修改了《搏击俱乐部》的结局。原版《搏击俱乐部》时长 2 小时 19 分钟, 腾讯版本为 2 小时 7 分钟,除了有 12 分钟内容删减外,腾讯给了原版加入了一个非常和谐的结局:原版中两位男女主角手拉着手站在大楼顶层看着一栋又一栋高楼大厦爆炸倾颓;腾讯版本给了一段英文文字去讲述圆满大结局。
duangsuse::Echo
#statement #dev #math 你觉得我会说”编程到尽头是数学“吗?错。 实际上浮点编程、列表(即矩阵)处理让数学真正走入了现实世界,而流控和步骤算法尽管对有许多hack的图形学没意义,对小游戏却是必须的,比如数学就算不了最短路径和五子棋AI (我不觉得图论是数学,如果真是那样万物皆『数学』,没啥意义了) 编程和数学对一个”非== “的应用都是需要的 ,只有公式而缺乏位置什么也干不了,并没有谁的尽头是谁的说法。 倒不如说获得了编程的数学从无聊的算式推导和缺意义的符号跳出来,变得与现实接轨且…
#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] += a.data[i][k] * b.data[k][j];

它将a横b纵 一个十字叠起来了,核b的大小决定参考旁边的k像素。比如全是透明积也透明

但作为原理的『卷积』1像素=N像素积和是做了,卷的又是哪里,为和要横纵翻转才能用?
2D位图可表现为函数 f(x,y) 卷积核g较小些。卷f,g=Sum[xy] f(x,y)*g(w-x,h-y) 。wh=g.dim 。导数暂不涉及

表达式完全可以预翻转g位图。为何是中心翻转而非矩阵^T,为何是「卷」要从1D信号处理:f(t)*g(1-t) 来
开始为过滤f(t)的噪音,对它进行加权平均:t小的信号才衰减,固靠近当前t 更不平均,于是 f1(t)= f(t)*avg*(1-t) 。即 g=w*(1-t) ,随t下降序列。再Sum[t]f1(t)就是卷积
把f,f1 对照下?会发现 t=0 时g(1)f(0) ,t=1 g(0)f(1) ,连线gf就是反着的,所有位置都反

如果把 g(-t +1~k) ,它的avg*g随t上升, f(1)g(1) 就正确且可滑移k了。
x+y=n 即 y=n-x = -x+n (\形图像) n上升时像卷帘拉起,故名卷积

丢俩骰子,点数和=6 有3种数对:13;22;31 ,卷积就是 Sum[i=1~3]f(i)g(4-i) 。这是对3的切分

卷积核b应用于位图 a 产生大小相等(左上角补了0)的过滤图像, Sum[ij]b(h-i,w-j)*a(i,j) ,实践直接拿dot积就行
b=[1/9]*9 width 3 会模糊图像
b=[-1]*9 width 3 中心=9 会锐化

A: 说起来,那些手机电量20%直接跳5%,还有QQ升级的 20% 直接跳100% 是怎么弄啊
B: 编程一点就是 v>5? v+15 : v ,相当于 x,0~5; 15+x,5~100 的两条线 。数学点用 ease-in 贝兹线,它在0平滑 1正常。纵翻 (1-y)*100。 QQ的就不必1-
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
Kotlin的方法就是完全自底向上构造 suspend fun 的返回值,调用后立刻返回等 Dispatcher 去cont 那些最底下的 delay 等操作,全OK顶层自然就 return val 了 JS的方法还需要一个 awaiter 去一层层剥开 function* yield 的 Promise 去next(promVal),不像 Kotlin 直接不支持返回值,全交给 cont 参数决定恢复到哪继续了 这样实现 delay setTimeout(f,dt) 只需要把 f=cont.resume…
与其说状态机化暂停是kt实现await的方式,不如说状态机只是组合 suspend fun 调用顺序的一种方法。

自动回调参才是 async 能在xx时被动计算的原因,f()f1()到最后是 fetch,setTimeout 这样的调度器基元再f1然后f,如果外围没有while这些。而这个过程是可内联的,不生成多余对象。只有到函数作为值时才必须看CPS等效的闭包,即尾调用优化(王某40行代码
f内f1() 的语义从调用变成添加f尾步骤,如果用状态机就能少创建几个回调函数闭包。对 fun()=if(true) 1 else await() 的情况上级也不挂起的(这个CPS化是要变 ok(1) 和 await(ok) 两种情况,ok是尾步骤,反而复杂

await(f,f1) 就是 f1(...arg, f) ; yieldAll(f,f1) 则是 [...f1, ...f] 。平时awaiter只是用一个循环允许协程链接执行权,等到任务创建到fetch(...) 层次,等待浏览器事件,它再令每状态机朝return-to-caller前进。如果每层都只yield一个Promise ,相当于awaiter 把f1.then(f) 就行了,没必要 then回自己再去判断是继续 await 还是返回上级
#Haha 十步口一人……千里不留行
2. #reveng N64 Fast3D 移植到OGL和DX3D
3. #opensource #github 🤔 封禁发行权…… 他是作者,但发行好像是社区问题……看到大佬就用的不在少数
Forwarded from Solidot
《塞尔达传说时之笛》PC 移植版准备下个月发布

2022-01-25 15:12

去年 11 月,名叫 Zelda Reverse Engineering Team (ZRET)团队耗时近两年成功将任天堂游戏《塞尔达传说时之笛》 完整反编译,将可执行的 ROM 转变成可读可编辑的 C 代码。现在另一个名叫 Harbour Masters 的团队准备在下个月 发布 PC 移植版本。为了避免来自任天堂的潜在法律诉讼,发布的版本将不包含任何游戏素材,玩家将需要使用工具从 ROM 中提取出必要的素材。《时之笛》移植版的开发受益于任天堂另一款知名游戏《超级马里奥64》的 PC 移植版本,《时之笛》可以使用为《超级马里奥64》开发的 Fast3D 渲染引擎,该引擎将 N64 微码转换到 OpenGL 或 DirectX。开发者称《时之笛》和《超级马里奥64》八成的渲染管线是重叠的,这节省了大量的移植时间。
Forwarded from Solidot
故意破坏开源库的开发者想要拿回发行权但没人支持

2022-01-25 16:00

color 和 faker 开发者的 Marak Squires 本月早些时候通过加入无限循环故意破坏了这两个广泛使用的依赖库。在包管理器 NPM 上,colors 的周下载量超过 2000 万次,有近 19000 个项目依赖它;faker 的周下载量超过 280 万次,有超过 2500 个项目依赖它。在事故发生之后,GitHub 平台短暂封禁了其账号,在解封之后其发行权仍然被剥夺。faker 之后出现了社区管理的分支。Marak Squires 想要拿回发行权,他声称自己的邮件没有收到任何回应,而他有一百个包需要维护,“每个人都会不时犯下编程错误,没有人是完美的。”但无心之过和故意破坏显然是两码事,他的请求几乎无人支持,认为他的故意破坏损害了开源生态系统的信任原则。
#learn

中文词性: 名动修饰(副词) 代介助 连词 数量词
修饰即形容词,修饰:副词=量:数 。比如 XX 很美/很丑 ,很极、非常 就是副词
连词表示逻辑:那么、所以、并且、或者、既…又

名词也可以分物人名地名,概念名(性格、心情),方位(内外上下左右)
动词除了动作,也能是心理(想做,愿意)和趋势(上去)
代词除了是上下文既有的名词,也能是「谁」「这」的疑问和位置指代
介词是插在两个概念间的:把、以、从、至
助词都可去掉:的、地、得 、着、了 、阿吧吗
感叹(噫吁嚱)也可去掉

断句梗:管理和服务里没有『和服』
我们中出了一个叛徒
语序不一定影响能中文的读阅,比如这句是就乱的

太君式中文:
你地,什么地干活(你干什么的
你地,妈妈地,死拉死拉地(你-妈妈的 要死的)
快背他地干活(快干活-背他
不背他地干活,死拉死拉地有(不干活-背他,有要死

强制写出所有助词(北京的故宫地博物馆、我的手上的礼物的带子)
a打b=a打b地干活(其实是 强制写出「干活」“你要(搬砖到那)动词性意群”+你(搬砖到那)的要 介词后置……
的=地;要x=x拉x拉
适用于口语
比如: 李明你现在手头方便吗?帮我去小卖部买水吧

你李明地,方便吗现在地手头? 去小卖部买水地干活(改不下去,反正越短改起来越喜感

词性:
(法)式(温泉水煮(蛋)) 配 (意大利(花园)圣女果)
a(a(n)) j (an)
nj(nj(n)) j (n(n)n)

自然语言除了动名形是没有绝对的标记法的……

海盐 番茄 圣女果 都是同种物品的不同名字,不过樱桃车厘子这种就没有很高端的讲法…
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 测试^迷了
duangsuse::Echo
#algorithm UnionFind、三角分形(精简版) 如果要实现 Set 你会怎么做?每次 add(x) 时去重遍历 uniq() 吗? 现在按数组Array(N).fill(0).map((x,i)=>i) 实现 Set<Int> 。每位与一个索引关联,初始是和自己 当加一对 a-b ,把它们的位置赋上彼此,就能知道在不在同集合内——不行,如果还有a-b-c 咋赋值? 答案是 a->b 关联 b->c 再关联,因此 find() 变成链表遍历后最终同一。然后 add(a,c) 先找这个"b",把它…
sdf 是 signed distance func 的缩写。圆内是-, 越接近圆边越0 ,圆外是 + ,所以用 smooth?step 来锐化切边、mix 来混合颜色
正三角公式是
v1 r = TURN/float(N);
v1 l = atan(p.x,p.y)+PI;
d = length(p)* cos(floor(.5+l/r)*r -l);//distance-shape

n角星的边上有比率m的外角
float sdStar(p,r,int n,float m) // m=[2,n]{
// p,r not related
float an = 3.141593/float(n);
float en = 3.141593/m;
vec2 acs = vec2(cos(an),sin(an));
vec2 ecs = vec2(cos(en),sin(en)); // ecs=vec2(0,1) and simplify, for regular polygon,

float bn = mod(atan(p.x,p.y),2.0*an) - an;
p = length(p)* vec2(cos(bn),abs(sin(bn)));

// line sdf
p -= r*acs;
p += ecs*clamp( -dot(p,ecs), 0.0, r*acs.y/ecs.y);
return length(p)*sign(p.x);

🤔??? https://www.shadertoy.com/view/3tSGDy
另: GLSL 没随机数,雪花白噪声都是通过 hash (散列函数~ 从当前xy得来. 计算一般通过 fract(sin( ,hash2D 靠dot加权求和,不然效果xy就同
https://blog.csdn.net/u012722551/article/details/103926660 Unity CG. GLSL 函数。 filter:saturate(14) 可以在网页调色彩饱和度..
duangsuse::Echo
【《有一种美叫数学2》| 用方程表达世界的本质,用代码描绘数学的光彩。-哔哩哔哩】 https://b23.tv/cDXyDUU #math 推荐一个超级牛的 Matlab 数学可视化作者,虵🐸的校友 运动模拟、椭圆反射、各种3D图形、虚数Koch分形、A* JPS 、集合覆盖问题、傅里叶、梯度下降、卷积图形识别可视化、泰勒展开、微积分逼近,许多种算法,反正是数学的有很多🐱 实在是太 #dalao 了这个,也在做公众号但是就不一样,很nice A:你说这个文本入场动画咋做的队列啊,两边同时往中间靠? …
#math #signal http://amid.fish/karplus-strong 只是合成一段普通的吉他拨弦,可以用动态平均(a,b)=>(a+b)/2 递减白噪声波形。但要做得更自然,需要知道当前t 缓冲区里的波形和频率,从而仅抑制高频sin波(类似Low-Pass Filter),

傅里叶变换可以把任何波形拆成不同频于不同起始(fr,dt)的sin波叠加,同样的原理也应用于 xy[] 路径到圆半径速度、位图切片(JPEG压缩) 等。(频谱图和使用的 constant Q 基频f0提取。
任何波形,白噪声包括方波都可以提取为许多sin((t-dt)/fr) 相加的形式。 声音的音高也称为频率。“赫兹”的意思是“每秒振动”,6弦吉他最高弦频率为 330 Hz
不同的震动模式带来不同音色。从sin波中看出振动“块”,它代表一个完整的来回运动。我们将此块称为振动的周期。产生这些声音的方式本质上是通过在一段时间内,采用特定的振动模式并一遍又一遍地重复它。
让它们像乐器最简单的方法是:让响度随着时间的推移而消失。sin的滑动平均听起来就像木琴

振动的两种视角模式与频率—是完全同义的。知道振动模式是什么,等于在哪里标记它的频率(即每个周期有多长),知道频率就可以再现振动模式。
比如在 .1s 5Hz 和 .3 10Hz ,同时播放(+,Gain)就会变成更复杂的声音

傅里叶变换是一种数学方法,仅通过查看振动的形状即可找出振动中包含哪些正弦振动频率。在窗口内,从时间-震子位置转变为时间-正弦频率。查看不同频率的震幅分量
我们可以对任何振动使用傅里叶变换来向我们展示它的正弦频率构建块。

频率图的y是一条连续的分量频率线,而不是代表正弦曲线的各个频率的单个点:不是像方波那样的 100 Hz、300 Hz 和 500 Hz,白色的频率分量噪声分布在一个连续的范围内
就像白光包含相同数量的光谱中所有颜色一样,白噪声包含相同数量的振动频谱中的所有频率
就像一块大理石包含所有可以想象的雕像一样,从白噪声开始,取出我们想要的那种声音。

通过简单地使每个振动周期的大小变得越来越小,均匀抑制了所有分量频率
周期[0]=白噪声;[1]=f(x)/2 缩小,将所有频率数量减少相同
对于 Karplus-Strong ,右x的高频信号衰减更快。这种方式是有道理的,当我们拨动吉他弦时,它开始在整个地方振动,具有广泛的分量频率,但更快的振动当然会更快地消失。
对于一把真正的吉他,周期间过渡会更加渐进,拖延较长的时间。通过改变每个周期的长度来调整每段;改变我们降低高频的速度,可以使声音持续时间更长(听起来像电吉他)或更短(听起来更像原声吉他)。

+声音是由物体振动产生的。振动的形状带来不同的声音。
+振动的频率是震子每秒来回移动的次数。频率越高,音调就越高。
+傅里叶变换表明,我们可以将任何振动分解为不同频率的分量正弦振动的混合。


https://www.jezzamon.com/fourier/zh-cn.html #recommend #learn
公式参考 Better Explained

“ 将声音表示为一堆正弦波。然后可以通过忽略掉较小幅度的高频成分来压缩声音。尽管得出的波形与原始波形不一样,但是听起来将会和原始声音很接近。这基本上就是MP3做的事情
能够在计算机上区分高低频,我们就可以了解一个人实际可以听到的内容。或弄清楚这个波包含了什么音符。

” 我们可以将一个手绘图理解为一个3D的形状,因为点的位置在随时间移动。如果你想象一个人正在绘制一只手,那么这三个维度就代表了某一时刻铅笔尖的位置。除了x和y维度告诉我们笔尖的位置,还有一个时间维度。

我们只用几个圆圈就可以很好地近似表达出原始图案。因为这是一个相当简单的形状,所有后面添加的小圆都是使边缘更加锐利。
使用的是之前的3D螺旋正弦波(在t=z轴画圆)。如果我们添加很多这些螺旋,得到的东西就看起来像我们的3D形状。
请记住,当我们从前面看某t的它们时,这些3D波浪看起来才是像圆圈

基于直方图压缩图像取决于色板大小,纯色图片效果最好,复杂图形无法压缩。 而有了FT,就可以基于有效度和边缘压缩图像
“ 无论我们有什么样的图像,我们都可以添加一堆这些正弦波来回到原始图像。

使用的每个正弦波也将是一个个8x8小图像。我们现在使用一些黑白条纹的小图像,像是“线”,而不是波。为了表示“波”的大小,每个图像将具有或多或少的明暗对比。
为了表示灰度图像,我们需要一些水平(以及垂直)的波图案,将两者相乘

如果我们把这些小图案的对比度调整到适当的值,然后将它们相加,我们就可以得出任意图像。
我们使用一组频率来确定每个像素的亮度或暗度,然后是另外两组用于颜色,一组用于红绿色,另一组用于蓝黄色。图像被分解为8x8块,每个块分别进行分解。我们为每个块使用的[频率个数]决定了JPEG图像的品质。
对于实际的JPEG图像来说,剩下的只有一些额外的细节。
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.. 😒 这个都支持…
#dev 信号(波)处理:能满足你一切遐想的领域。 你觉得非常厉害的3D渲染光追、2D绘制图示、动画缓动、纹理着色、物理粒子和GPU加速计算 在信号处理科普文里像活动手指一般自然。 不需要框架和多余的公式,作者手写就能实现,对”不知名“web技术的使用大大简化了无关原理的流程 🤪

当你写下 g.arc(x,y,l, 0,2pi) 时,怎么会知道 length(P+ p-l) 和极座标系弧度atan2也能定义一个圆呢,其实说到底关于「现实世界」程序员知之甚少,如果能结合物理几何来编程,就能做到更多、更多有趣的事,可比在 DevTools 里调个颜色排版设计模板要好玩不少

什么是「非==」的应用呢?平时看的各种页面或是”app“形式页面,其代码都是基于「从API或文件树/配置obj/IPC其他应用 读写信息」「过滤与展示数据的子集」「检查/填默认值」,如果没有突破「数据子集」的列表处理,就属于(==)类应用,在我的观念里,可改写数据绑定到UI是没有Element外的名词的,因此编程任务只是设计模型和检查及UI,自动生成一个API,给页面链接上一些其他功能,本来是属于很模板化的代码,应用的特点一个文件能定义完的那种。 当然因为工程习惯,冗杂许多就是了

代码在某种程度上都可以称为在绑定概念:编译器是把变量和函数绑定到具体位置与规范:文本与求值序绑定,应用是给各种数据struct 做UI+平台套版代码 :obj与交互绑定、图形学是把各种位置绑定到数学函数(尽管看起来不是等号关系);但编程的目的是找一个概括性的对应关系,如果在同质模型上太磨叽就忽略程序里真正不同的地方。 绑定的原义就是同名符号指代相同位置。基于 [a,b]=p; p==a[0] 这样的关系,它并不复杂

许多应用通过lib(甚至有HTTP收费API)能实现有趣的功能,但终究是不够优雅。 许多实现了非常简单效果的库(例如定义个八分音表,放sin波) 占用了极大行数,而且有很无序的API 。许多时候问题有更好编程解法,就需要手动面对最底下的每次计算单帧


#plt #ce 刚刚也想了 suspend fun 实现的问题,现在是有状态机化和 call=inline-tail 两种方法可选

A: 我觉得在平直块里 yield() 类<3次就内联,否则状态机化。 列<> filter takeWhile forEach 这样 API只内联,用户可指定调用是否内联?
B: 啥叫平直?块都是嵌套的, if(q) a; else b; 的a 里yield 也是在语句块里,然而CPS 的话 If 后的代码也要复制一份,有 while 变 ifgoto 完也麻烦
A: 那就只允许fun{} 内<3的内联,这样翻译起来也简单。把 val a=1+f1()+2 改成 var a=1; f{a=a+it+2} 就行了(状态机化的pass),然后末尾先收集,切分代码交给直到第[0]suspend
B: 就是 Haskell 的 do <- 那种咯,那状态机化呢
A: 闭包序列化基础上加 st:Int ,表达式切分后,入口=0 ,休眠一次+1 ,函数头部加 switch 跳转表,直到最后一块真 return
B: Promise.all 其实(半)已经能做了,主要还是没做过,解释器模式上不知有啥该改
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. ));