From 4ba2f075ac47ccf35d986cd13dd204d41e702d96 Mon Sep 17 00:00:00 2001 From: lmj01 Date: Thu, 15 Aug 2024 08:56:29 +0800 Subject: [PATCH] update --- articles/notes/work.md | 2 + cg/Color.md | 36 ++++-- cg/dental/orthodontics.md | 46 +++++++ cg/dental/tooth.md | 16 +++ cg/image/ffmpeg.md | 6 + cg/image/gif.md | 13 +- cg/image/index.md | 1 + cg/threejs/color.md | 28 +++++ cg/threejs/index.md | 2 + cg/threejs/math.md | 50 ++++++++ cg/threejs/threejs.md | 13 -- cg/tools/gizmo.md | 9 +- cpl/js/webpack.js | 242 ------------------------------------- exercises/combinatorics.md | 16 ++- exercises/math.md | 12 ++ exercises/polynomial.md | 23 ++++ index/online.md | 2 + 17 files changed, 245 insertions(+), 272 deletions(-) create mode 100644 cg/dental/orthodontics.md create mode 100644 cg/dental/tooth.md create mode 100644 cg/image/ffmpeg.md create mode 100644 cg/threejs/color.md create mode 100644 cg/threejs/math.md delete mode 100644 cpl/js/webpack.js diff --git a/articles/notes/work.md b/articles/notes/work.md index 7e823e0..765c5ba 100644 --- a/articles/notes/work.md +++ b/articles/notes/work.md @@ -6,6 +6,8 @@ ## 快速目标位 +后台矩阵的存储是按照列存储的, + 牙齿的关键点 - fa 牙号放在的位置 diff --git a/cg/Color.md b/cg/Color.md index b7c28a7..a23e2a8 100644 --- a/cg/Color.md +++ b/cg/Color.md @@ -1,21 +1,23 @@ # [Color](https://www.color.org/index.xalter) -> ICC International Color Consortium - -- [The Importance of Being Linear](https://developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-24-importance-being-linear) 色彩主观就是光线给人眼的感觉,客观地说就是人眼对可见光0.43um到0.78um的波长,不同的波长对人眼产生不同的神经信号,传递大脑的感知就是色彩,非可见光人眼是无法感知的。 如果一束光,它的光子都是同一波长的,就是单色光;不同波长的光合在一起就是混合光; -## Color Model & Space +## 概念 + +- ICC International Color Consortium +- 亮度Lightness、Luminance +- 明度Brightness、Value +- 辉度Luma,把使用色觉校正的结果称为辉度 + +### 颜色模型与颜色空间 - Color Model色彩模型是指一个抽象的数学模型,用来描述一个颜色怎么样被表达成一组数字,通常会用3个或4个数值表示 - Color Space是色彩模型有了数值具体的表述和规则,所有色彩形成一个封闭集合,并有计算属性,这个集合就是色彩空间 - additive model,加性模型,根据三原色原理规定一个坐标轴分别代表RGB立体数学模型 - 减性模型,越混合越黑 - - - RGB,大多与显示设备、输入设备(数码相机、扫描仪)相关联的 - sRGB,1996,较小色域空间,主要应用在网页浏览,在色彩调整及转换时会保存信息以备使用 - AdobeRGB,1998,为解决sRGB不能覆盖CMYK的问题,为了显示器,主要在蓝绿色方向进行扩展,完全覆盖sRGB,基本覆盖CMYK @@ -43,7 +45,7 @@ HSL/HSV解释:L是指从最暗的黑色到色相纯色再到白色,L最大 js中canvas的颜色getImageData中setting有这个参数 -## Gamma Correction +### Gamma Correction gamma校正,存在的原因有 @@ -62,13 +64,10 @@ gamma校正,存在的原因有 HDR高动态范围High dynamic range,就是添加更多的动态范围到图片中,人眼对场景采样是有能自动**变焦频率**的,即在明暗对比度比较强烈的场景下人眼都能看得各个部分的细节,但相机等在拍照时由于变焦固定或频率很低,得到的图片就只有一个焦距上的细节,导致细节上的缺失。通过多次曝光,得到不同亮度不同焦距内的细节组合起来提高清晰度,这就是HDR。 -## 术语 -- 亮度Lightness、Luminance -- 明度Brightness、Value -- 辉度Luma,把使用色觉校正的结果称为辉度 +### Color in Web -## web-color +- [ThreeJs中的color](/cg/threejs/color.md) 在canvas中或CSS中,可以使用某个属性来表示颜色,纯色、渐变色等 ```js @@ -90,4 +89,15 @@ ctx.strokeStyle = canvasGradient; - [Project Status, and iro.js 6.0](https://github.com/jaames/iro.js/issues/217#issuecomment-1214403290) - [Chroma.js is a tiny small-ish zero-dependency JavaScript library (13.5kB) for all kinds of color conversions and color scales.](https://github.com/gka/chroma.js/) - [Color conversion & manipulation library by the editors of the CSS Color specifications ](https://github.com/LeaVerou/color.js) - - [A comprehensive color library for JavaScript.](https://github.com/Evercoder/culori) \ No newline at end of file + - [A comprehensive color library for JavaScript.](https://github.com/Evercoder/culori) + +## 参考 + +- [The RGB-XYZ Matrix Calculator](https://www.russellcottrell.com/photo/matrixCalculator.htm) + +- [OpenColorIO, A complete color management solution geared towards motion picture production with an emphasis on visual effects and computer animation.](https://opencolorio.org/) + - [Blender Color Management](https://docs.blender.org/manual/en/latest/render/color_management.html) + +- [The Importance of Being Linear](https://developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-24-importance-being-linear) + +- [What every coder should know about gamma](https://blog.johnnovak.net/2016/09/21/what-every-coder-should-know-about-gamma/) \ No newline at end of file diff --git a/cg/dental/orthodontics.md b/cg/dental/orthodontics.md new file mode 100644 index 0000000..29eaab4 --- /dev/null +++ b/cg/dental/orthodontics.md @@ -0,0 +1,46 @@ +# Orthodontics + +## Orthodontics Study Models + +正畸研究模型,是一个正畸治疗过程的记录,包括正畸前、正畸中及正畸后 + +模型由两部分组成, +- A=Art portion,底座部分,模型的底部 +- B=Anatomic portion,解剖部分,牙齿、牙槽突、上颚 + +![](https://mmbiz.qpic.cn/mmbiz_jpg/U5fSdEQopSEX8ibH7HFUWHxfuaqgj8HltKAqGb4VI8h0aHTSXe3Quc5sJk4CyV7AXwV1EXgtfMQ7T0a0nB0oWBg/640?wx_fmt=jpeg&from=appmsg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) + + +### 目的 +### 作用 +- 评估和记录牙齿解剖 +- 评估并记录弓形 +- 计算总空间需求/差异 + + +## 参考 + +- [LuxCreo](https://luxcreo.com/) +- [Graphy](https://graphy.app/) + +### mesh处理软件 + +- [mesh]() +- [blender]() + [github: Create, Simulate, Visualize, and Analyze Realistic 3D Cell Models ](https://github.com/mcellteam/cellblender) +- [Meshmixer](https://meshmixer.com/) + +### [exocad](https://exocad.com/cn/) + +- [功能模块](https://shop.exocad.com/en_en/dentalcad-add-on-module.html) + +### github + +- [A software for dental mesh processing and visulization ](https://github.com/swayfreeda/DentalMeshProject) +- [3D Dental surface segmentation with Tooth Group Network ](https://github.com/limhoyeon/ToothGroupNetwork) + +- [A 3D Slicer extension to use AMASSS, ALI-CBCT and ALI-IOS ](https://github.com/DCBIA-OrthoLab/SlicerAutomatedDentalTools) +- [SJTU 2019 fall CS337 Computer Graphics Project : 三维牙齿模型的自动化预处理](https://github.com/SJTUzhh/Dental-Pre-Processing) + +#### web +- [A web/desktop application to manage your dental clinic practice. ](https://github.com/alexcorvi/apexo) diff --git a/cg/dental/tooth.md b/cg/dental/tooth.md new file mode 100644 index 0000000..399dd20 --- /dev/null +++ b/cg/dental/tooth.md @@ -0,0 +1,16 @@ +# Tooth + +## DCS + +在牙科中,牙齿坐标系(Dental Coordinate System, DCS)是一种用于精确描述牙齿位置和方向的三维坐标系统。这种坐标系对于牙齿建模、修复、正畸治疗和种植牙手术等应用非常重要。以下是牙齿坐标系的一些基本定义和特征: + +- 原点(参考点), 通常将坐标系的原点定义在牙齿的某个解剖特征上,例如牙齿的中心点或牙齿的颊尖、如某一牙齿的根尖点或牙槽嵴的特定位置 +- 轴的定义1 + - X轴(前后方向):通常沿着牙齿的长轴,从牙齿的颊侧(面部)指向舌侧 + - Y轴(垂直方向):垂直于X轴,沿着牙齿的咬合面,从牙齿的近中面(中线侧)指向远中面(耳朵侧) + - Z轴(高度方向):垂直于X轴和Y轴,通常指向上方,表示牙齿的高度或深度 +- 轴的定义2 + - Z轴:垂直于牙槽嵴平面,通常代表牙齿的垂直移动方向(如伸长或压低) + - X轴:平行于牙槽嵴平面,代表牙齿的近远中移动方向(如向前或向后移动) + - Y轴:垂直于X轴和Z轴,代表牙齿的颊舌向移动(如唇向或舌向移动) + \ No newline at end of file diff --git a/cg/image/ffmpeg.md b/cg/image/ffmpeg.md new file mode 100644 index 0000000..1434c25 --- /dev/null +++ b/cg/image/ffmpeg.md @@ -0,0 +1,6 @@ +# ffmpeg + +## [ffmpeg.wasm](https://ffmpegwasm.netlify.app/docs/overview) + +- [github](https://github.com/ffmpegwasm/ffmpeg.wasm) +- [example vite vue](https://github.com/ffmpegwasm/ffmpeg.wasm/blob/main/apps/vue-vite-app/src/components/FFmpegDemo.vue) diff --git a/cg/image/gif.md b/cg/image/gif.md index b8a307c..2fc48dc 100644 --- a/cg/image/gif.md +++ b/cg/image/gif.md @@ -1,6 +1,17 @@ # GIF > Graphics Interchange Format是一种位图,已8位色即256种颜色重现真彩色的图像,实际上是一种压缩文档,采样LZW压缩算法进行编码,有效减少图像在网络上的传输时间. +- [fast GIF encoding](https://github.com/mattdesl/gifenc) +- [ JavaScript GIF Codec](https://github.com/qq15725/modern-gif) - [jsgif: A GIF player in JavaScript](https://slbkbs.org/jsgif/) -- [带你如何用js读取gif图片数据流,解码gif ](https://juejin.cn/post/7022637452066029599) \ No newline at end of file +- [带你如何用js读取gif图片数据流,解码gif ](https://juejin.cn/post/7022637452066029599) +- [GIF (version 89a) Encoder written in TypeScript ](https://github.com/nobuoka/GifWriter.js/) +- [Full-featured JavaScript GIF encoder that runs in your browser.](https://terikon.github.io/gif.js.optimized/) +- [JavaScript GIF encoding library ](https://github.com/jnordberg/gif.js) + +## [gif-writer](http://nobuoka.github.io/GifWriter.js/) + +这个编译环境是gradlew,需要Java环境 + +- [github](https://github.com/nobuoka/GifWriter.js) diff --git a/cg/image/index.md b/cg/image/index.md index f1cd5fe..8dd6ce7 100644 --- a/cg/image/index.md +++ b/cg/image/index.md @@ -10,6 +10,7 @@ - [JPEG](/cg/image/JPEG.md) - [Image Process](/cg/image/ImageProcessing.md) - [tiff](/cg/image/tiff.md) +- [ffmpeg](/cg/image/ffmpeg.md) - [ImageMagick](/cg/image/imageMagick.md) diff --git a/cg/threejs/color.md b/cg/threejs/color.md new file mode 100644 index 0000000..1b84477 --- /dev/null +++ b/cg/threejs/color.md @@ -0,0 +1,28 @@ +# [Color management](https://threejs.org/docs/index.html#manual/en/introduction/Color-management) + +- [css color4](https://www.w3.org/TR/css-color-4/#predefined) + +- color space色彩空间有三个参数组成:color primaries原色,white point白点,transfer functions转换函数。 +- color model是语法上可选择的色域color gamut,即颜色值的坐标。在three.js中只关心RGB color model,having three coordinates r, g, b ∈ [0,1] ("closed domain") or r, g, b ∈ [0,∞] ("open domain") each representing a fraction of a primary color. +- color gamut是由color primaries和white point决定的,在这个volume内的就是gamut,之外的不能通过通过这些值来表示 +- SRGBColorSpace和LinearSRGBColorSpace使用相同的color gamut,唯一的区别是transfer function。 + - Linear-sRGB是线性对应于物理光强度 + - sRGB使用非线性transfer function,更接近于人眼接收的光和通用显示设备的显示光 +- lighting calculations和其他rendering操作常常发生在线性空间中,但线性颜色值在image或framebuffer中的存储效率较低,且人眼看起来也不太对。 +- input texture输入的纹理和final rendered image最终效果图通常使用非线性的sRGB color space。 + + +- [[SOLVED] Why does object get dimmer/darker when light gets closer to it?](https://discourse.threejs.org/t/solved-why-does-object-get-dimmer-darker-when-light-gets-closer-to-it/3475) + +## linear workflow + +在r152中引入这个概念, + +- [The Importance of Being Linear](https://developer.nvidia.com/gpugems/gpugems3/part-iv-image-effects/chapter-24-importance-being-linear) +- [Updates to Color Management in three.js r152](https://discourse.threejs.org/t/updates-to-color-management-in-three-js-r152/50791) +- [Updates to lighting in three.js r155](https://discourse.threejs.org/t/updates-to-lighting-in-three-js-r155/53733) +- [Shadow and color problems going from v64 to v161](https://discourse.threejs.org/t/shadow-and-color-problems-going-from-v64-to-v161/61640) + + +```js +``` \ No newline at end of file diff --git a/cg/threejs/index.md b/cg/threejs/index.md index 28a4eb7..15c7ba9 100644 --- a/cg/threejs/index.md +++ b/cg/threejs/index.md @@ -8,6 +8,7 @@ - [Grid实现](/cg/threejs/grid.md) - [shader](/cg/threejs/shader.md) - [material材质](/cg/threejs/material.md) +- [数学相关](/cg/threejs/math.md) ## 参考 @@ -21,3 +22,4 @@ - [22](https://github.com/brunosimon/folio-2019) - [THREE.js rendering order渲染顺序](https://segmentfault.com/a/1190000041221932/en) - [A camera control for three.js, similar to THREE.OrbitControls yet supports smooth transitions and more features. ](https://github.com/lmj01/camera-controls) + diff --git a/cg/threejs/math.md b/cg/threejs/math.md new file mode 100644 index 0000000..36905d0 --- /dev/null +++ b/cg/threejs/math.md @@ -0,0 +1,50 @@ +# Math + +## 矩阵 + +矩阵存储有两种方式 + +- 行存储,横向,row-major order +- 列存储,竖向,column-major order + +three.js的Matrix4对外的接口使用row-major order方式,内部存储结构使用column-major order。 + +旋转矩阵的乘法有两种 + +- 前乘(左乘)pre-multiply,用于坐标系相对于固定坐标系进行旋转,因为固定坐标系的必须先存在,新的矩阵应用就是后旋转. + +$R_{AB}=R_{B}R_{A}$ ,表示先旋转A,再旋转B + +- 后乘(右乘)post-multiply,用于欧拉角系统,每个旋转矩阵都以前一个坐标系为基准 + +$R_{BA}=R_{A}R_{B}$,表示先旋转B,再旋转A + +```javascript +// Vector3 +// v_p dot v_mv_i dot position +project( camera ) { + return this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix ); +} +// v_p_i dot m_model dot position +unproject( camera ) { + return this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld ); +} +// Object3D +const matrix = new Matrix4(); // local transform +const matrixWorld = new Matrix4(); // the global transform of the object没有父节点时,等于matrix +applyMatrix4( matrix ) { + if ( this.matrixAutoUpdate ) this.updateMatrix(); + this.matrix.premultiply( matrix ); // 把矩阵应用到当前对象,就是使用前置相乘的方法 + this.matrix.decompose( this.position, this.quaternion, this.scale ); +} +updateMatrix() { // 更新矩阵,由当前的位置,朝向,缩放重新构建坐标系 + this.matrix.compose( this.position, this.quaternion, this.scale ); + this.matrixWorldNeedsUpdate = true; +} +// 乘以矩阵时 +// 当外部数据elementsArray是传入的时行主序时, 需要转置,以保持内部的列存储逻辑 +const mat = new Matrix4().fromArray(elementsArray).transpose() +``` + +$M_{l}M_{w}=$ + diff --git a/cg/threejs/threejs.md b/cg/threejs/threejs.md index d9e1491..231e01e 100644 --- a/cg/threejs/threejs.md +++ b/cg/threejs/threejs.md @@ -1,19 +1,6 @@ # threejs-core -## Object3D - -```javascript -matrix = new Matrix4(); // local transform -matrixWorld = new Matrix4(); // the global transform of the object没有父节点时,等于matrix -matrixViewMatrix; -normalMatrix; -``` -### updateMatrix -```javascript -matrix.compose(position, quaternion, scale); // 构造local matrix transform -``` - ## EventDispatcher 事件系统是一个交互库必备,threejs的event使用了js的event事件 diff --git a/cg/tools/gizmo.md b/cg/tools/gizmo.md index 9832074..5614231 100644 --- a/cg/tools/gizmo.md +++ b/cg/tools/gizmo.md @@ -1,7 +1,12 @@ # Gizmo -> 小部件 + - [izmo control library for 3D object manipulation (4x4 matrix) ](https://github.com/CedricGuillemet/LibGizmo) - [ImGui GIZMO widget - 3D object manipulator / orientator](https://github.com/BrutPitt/imGuIZMO.quat) -- [Immediate mode 3D gizmo for scene editing and other controls based on Dear Imgui ](https://github.com/CedricGuillemet/ImGuizmo) \ No newline at end of file +- [Immediate mode 3D gizmo for scene editing and other controls based on Dear Imgui ](https://github.com/CedricGuillemet/ImGuizmo) + +## threejs + +- [讨论](https://discourse.threejs.org/t/how-to-make-transform-controls-not-to-move-with-camera/21584) + - [src code](https://jsfiddle.net/v2680nta/1/) \ No newline at end of file diff --git a/cpl/js/webpack.js b/cpl/js/webpack.js deleted file mode 100644 index 90d5429..0000000 --- a/cpl/js/webpack.js +++ /dev/null @@ -1,242 +0,0 @@ -!function(modules) { - // webpackJsonpCallback(chunkIdList, moreModules) - function webpackJsonpCallback(t) { // here t is arguments - let a = t[0];// chunkIdList -- [] - let moreModules = t[1];// moreModules - let s = 0; - let callback = []; - // - for (; s < a.length; s++) { - let chunkId = a[s]; - Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId] && callback.push(installedChunks[chunkId][0]); - installedChunks[chunkId] = 0; - } - // - for (modelId in moreModules) - Object.prototype.hasOwnProperty.call(moreModules, modelId) && (e[modelId] = moreModules[modelId]); - // - for (pushToWebpackJsonp && pushToWebpackJsonp(t); callback.length; ) { - callback.shift()(); - } - } - var installedModules = {}; - var installedChunks = { - 0: 0 - }; - var r = {}; - var a = { - 1817: function() { - return { - "./index": { - __wbg_loadResults_a79a4858742b1492: function(e, t, o, r, a) { - return installedModules[1777].exports.__wbg_loadResults_a79a4858742b1492(e, t, o, r, a) - }, - __wbg_error_cc95a3d302735ca3: function(e, t) { - return installedModules[1777].exports.__wbg_error_cc95a3d302735ca3(e, t) - } - } - } - } - }; - function installFunc(moduleId) { - if (installedModules[moduleId]) - return installedModules[moduleId].exports; - var o = installedModules[moduleId] = { - i: moduleId, - l: false, // 是否loading - exports: {} - }; - // 保证模块加载时this指向的是module.exports - modules[moduleId].call(o.exports, o, o.exports, installFunc); - o.l = true; - return o.exports; - } - installFunc.e = function(e) { - var t = [] - , n = o[e]; - if (0 !== n) { - if (n) - t.push(n[2]); // 把exports的放入队列中 - else { - var s = new Promise((function(t, r) { - n = o[e] = [t, r] - } - )); - t.push(n[2] = s); - var c, l = document.createElement("script"); - l.charset = "utf-8", - l.timeout = 120, - i.nc && l.setAttribute("nonce", i.nc), - l.src = function(e) { - return i.p + "" + ({}[e] || e) + ".js" - }(e); - var u = new Error; - c = function(t) { - l.onerror = l.onload = null, - clearTimeout(d); - var n = o[e]; - if (0 !== n) { - if (n) { - var r = t && ("load" === t.type ? "missing" : t.type) - , a = t && t.target && t.target.src; - u.message = "Loading chunk " + e + " failed.\n(" + r + ": " + a + ")", - u.name = "ChunkLoadError", - u.type = r, - u.request = a, - n[1](u) - } - o[e] = void 0 - } - } - ; - var d = setTimeout((function() { - c({ - type: "timeout", - target: l - }) - } - ), 12e4); - l.onerror = l.onload = c, - document.head.appendChild(l) - } - } - // 入口函数 - ({ - 3: [1817] - }[e] || []).forEach((function(e) { - var n = r[e]; - if (n) - t.push(n); - else { - var o, s = a[e](), c = fetch(i.p + "" + { - 1817: "e288aa4f892d923ae806" - }[e] + ".module.wasm"); - if (s instanceof Promise && "function" == typeof WebAssembly.compileStreaming) - o = Promise.all([WebAssembly.compileStreaming(c), s]).then((function(e) { - return WebAssembly.instantiate(e[0], e[1]) - } - )); - else if ("function" == typeof WebAssembly.instantiateStreaming) - o = WebAssembly.instantiateStreaming(c, s); - else { - o = c.then((function(e) { - return e.arrayBuffer() - } - )).then((function(e) { - return WebAssembly.instantiate(e, s) - } - )) - } - t.push(r[e] = o.then((function(t) { - return i.w[e] = (t.instance || t).exports - } - ))) - } - } - )); - return Promise.all(t); - } - installFunc.m = modules; - installFunc.c = installedModules; - // 判断是否为原型链上的 - installFunc.d = function(e, t, n) { - installFunc.o(e, t) || Object.defineProperty(e, t, { - enumerable: !0, - get: n - }) - } - installFunc.r = function(e) { - "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { - value: "Module" - }), - Object.defineProperty(e, "__esModule", { - value: !0 - }) - } - installFunc.t = function(e, t) { - if (1 & t && (e = i(e)), - 8 & t) - return e; - if (4 & t && "object" == typeof e && e && e.__esModule) - return e; - var n = Object.create(null); - if (i.r(n), - Object.defineProperty(n, "default", { - enumerable: !0, - value: e - }), - 2 & t && "string" != typeof e) - for (var o in e) - i.d(n, o, function(t) { - return e[t] - } - .bind(null, o)); - return n - } - installFunc.n = function(e) { - var t = e && e.__esModule ? function() { return e.default } : function() { return e }; - installFunc.d(t, "a", t); - return t; - } - // 判断是否为原型链上的 - installFunc.o = function(e, t) { - return Object.prototype.hasOwnProperty.call(e, t) - } - installFunc.p = ""; - installFunc.oe = function(e) { - throw console.error(e), - e - } - installFunc.w = {}; - Object.defineProperty(installFunc, "p", { - get: function() { - try { - if ("string" != typeof ALIGN_CDN_PATH) - throw new Error("WebpackRequireFrom: 'ALIGN_CDN_PATH' is not a string or not available at runtime. See https://github.com/agoldis/webpack-require-from#troubleshooting"); - return ALIGN_CDN_PATH - } catch (e) { - return "" - } - } - }); - let s = window.webpackJsonp = window.webpackJsonp || []; - var pushToWebpackJsonp = s.push.bind(s); - s.push = webpackJsonpCallback; - s = s.slice(); - for (var l = 0; l < s.length; l++) { - webpackJsonpCallback(s[l]); - } - installFunc(installFunc.s = 1297); -}([ - function(module, exports, installFunc) { - }, - function(module, exports, installFunc) { - }, -]); - -/** - * webpack打包的特征, 两个文件 - * 一个主文件 - * !function(e){}([function(e,t,n){},function(e,t,n){},]); - * 另一个入口文件 - * (window.webpackJsonp = window.webpackJsonp || []).push([[3], {}]); - * - * function(e,t,n){}拥有相同的参数名称,在执行阶段是不同值的对象 - * 这些函数通过执行器来调用,一般模式为XXX.call(e,t,n) - */ - -/** - * function(e,t,n)分别是 - * installFunc.e - * installFunc.t - * installFunc.n - */ - -function(e, t, n) { - "use strict"; - var o = n(934); // 导入某个模块 - n.o(o, "Base64Index") && n.d(t, "Base64Index", (function() { - return o.Base64Index - } - )), -} \ No newline at end of file diff --git a/exercises/combinatorics.md b/exercises/combinatorics.md index 7aec601..6a42c72 100644 --- a/exercises/combinatorics.md +++ b/exercises/combinatorics.md @@ -19,4 +19,18 @@ - 容斥原理及应用 - 递推关系和生成函数 - 特殊计数序列 - - 组合设计 \ No newline at end of file + - 组合设计 + +
+xxx +
+ +
+2024-8-8 +如果从10个人中选择,有多少种方法可以组成一个由3个人组成的团队. +可能这样想,先任选一个就是有10种,再选一个有9种,最后选一个有8种。但这样选择下来是不对的,因为这里是无序的,及不需要排列3人团队。 +正确的方法是 + +$\frac{10 \cdot 9 \cdot 8}{3!}$ + +
diff --git a/exercises/math.md b/exercises/math.md index bece10e..0258a89 100644 --- a/exercises/math.md +++ b/exercises/math.md @@ -36,6 +36,9 @@ 2. 鸽巢原理Pigeonhole principle(抽屉原理),是一个基本的组合数学原理,表明n+1个鸽子放置n个巢中,至少有一个巢有两个鸽子。 - 证明,是验证的过程 +- 传统数学是指以几何(即视觉推理)和实数代数相关的 +- 进入20世纪后,希尔伯特引领将数学形式化为一组公理和演绎逻辑推理。 +
@@ -127,3 +130,12 @@ Iterated Function System迭代函数系统 - [Chapter 9 Iterated function systems—self-similar and self-affine sets](https://www.ma.ic.ac.uk/~jswlamb/M345PA46/F03%20chap%209.pdf) - [TRANSITION PHENOMENA FOR THE ATTRACTOR OF AN ITERATED FUNCTION SYSTEM](https://arxiv.org/pdf/2205.01185) + +## 竞赛 + +### 国际数学奥林匹克 +面向中学生的数学竞赛,考察的主要是几何(视觉推理)和实数代数一类东西 + +这些数学领域与相当的具体事物相关,数字和形状,这些概念也是非常扎实的。 + +构造是一个大的思路,很多技巧都是精心构造出来的。 \ No newline at end of file diff --git a/exercises/polynomial.md b/exercises/polynomial.md index 6e162df..b7c19b4 100644 --- a/exercises/polynomial.md +++ b/exercises/polynomial.md @@ -1,5 +1,28 @@ # 多项式 +## 整除 + +
+2024-8-8 + +$$ +\text{证明:对任何整数}n \ge 1, 49^n - 2352n - 1 \text{可被2304}整除 +$$ + +解答:首先观察数值特征有 + +$49=48+1, 2352 = 7^2 * 48, 2304=48^2$ + +因此需要证明 $48^2 | 49^n - 49 * 48 * n - 1$ ,其更通用的式子是 $(a-1)^2 | a^n - a(a-1)n - 1$. + +$$ +a^n - a(a-1)n - 1 = (a^n - 1) - a(a-1)n = (a-1)(a^-1 + a^-2+...+a+1) - a(a-1)n \newline += (a-1)(a^-1 + a^-2+...+a+1 - an) +$$ + +
+ + ## 二次方程QuadraticEquation ### 一元二次不定方程 diff --git a/index/online.md b/index/online.md index 8fba0b0..591d300 100644 --- a/index/online.md +++ b/index/online.md @@ -14,6 +14,8 @@ - [WebGL Report](https://webglreport.com/) - [WebGPU Report](https://webgpureport.org/) +- [Tunnelmole 是一个简单易用的隧道工具,不需要配置,只要一行命令,就让公网可以访问内网服务](https://tunnelmole.com/) + - npm或其他按照方式,执行tmole portNumber就可以生成一个链接拉 ## Blogs