
算法
文章平均质量分 81
一些基本的计算方式
妇男主任
分享开发外包过程中,关于一些基础原理性的内容,以及具体的底层实现方法的心得。
展开
-
神经元细胞结构刨析(持续更新)
神经细胞的学习笔记原创 2023-01-27 00:12:31 · 1695 阅读 · 0 评论 -
【用JS自制表格软件玩数据】10. 为表格脚本设计一个语法解析器
在EXCEL表格中,有个标配的VBA脚本语言,近年,也有人开始将 Python 也植入里面。在该自制的脚本语言中,目标是办公自动化。语法特性是尽量贴近 其他开发语言的使用习惯。但更倾向于简单易用为主。不排除后面进行简化。本章为脚本解析器,为下一章的虚拟机指令集与CPU,内存等虚拟硬件做铺垫。原创 2023-01-11 23:38:37 · 478 阅读 · 0 评论 -
使用 HTML 5 Canvas 和 Raycasting 创建伪 3D 游戏
随着最近浏览器性能的提高,除了像 Tic-Tac-Toe 这样的简单游戏之外,用 JavaScript 实现游戏变得更加容易。我们不再需要使用 Flash 来制作炫酷的效果,而且随着 HTML5 Canvas 元素的出现,创建外观漂亮的网页游戏和动态图形比以往任何时候都更容易。一段时间以来,我想实现的一款游戏或游戏引擎是一种伪 3D 引擎,例如 iD Software 在旧的德军总部 3D 游戏中使用的引擎。翻译 2022-11-14 14:17:03 · 1819 阅读 · 4 评论 -
数学科学的完整课程大纲(工科自学必看)
为了能够系统性学习数学理论打好更扎实的基础,我特地网上搜索,整理了一份数学科学大纲。按照这份材料去学习,基本上能够满足理论上的需求。原创 2022-11-14 13:29:45 · 5041 阅读 · 0 评论 -
用于游戏开发和其他目的的光线投射教程
Rust 编译工具https://www.rust-lang.org/zh-CN/tools/installRust 的编译工具依赖 C 语言的编译工具,这意味着你的电脑上至少已经存在一个 C 语言的编译环境。如果你使用的是 Linux系统,往往已经具备了 GCC 或 clang。如果你使用的是 macOS,需要安装 Xcode。如果你是用的是 Windows操作系统,你需要安装 Visual Studio 2013 或以上的环境(需要 C/C++ 支持)以使用 MSVC 或安装 MinGW +翻译 2021-09-05 02:16:46 · 1547 阅读 · 0 评论 -
构建一个JPEG解码器(4):帧和比特流
帧和比特流霍夫曼算法JPEG DHT 段下一次:读取比特流在上一部分中,我提到大多数 JPEG 文件在图像压缩之上采用了一种编码技术,试图从图像中去除任何冗余信息的痕迹。最常见的 JPEG 编码使用的技术是对数据压缩世界中常见的一种技术的改编,称为霍夫曼编码,因此详细探索霍夫曼解码器的结构和实现很有用。因为霍夫曼编码是 JPEG 编码器在保存图像文件时执行的最后一件事,所以它需要我们的解码器做的第一件事。这可以通过两种方式实现:重构:将完整图像扫描从其 Huffman 编码状态解码为临时占位符,并对翻译 2021-08-20 01:32:41 · 580 阅读 · 0 评论 -
Game boy模拟器(10):计时器
计时器定时器结构实现定时器仿真源码Timer.js:时钟增量播种伪随机数生成器Tetris.asm:选择新块自从第一台计算机组装在一起以来,它们的一个基本功能就是计时:根据计时器协调动作。即使是最简单的游戏也有时间元素:例如,Pong 需要以特定的速度在屏幕上移动球。为了处理这些时间问题,每个游戏机都有某种形式的计时器,以允许事情在给定的时刻或以特定的速率发生。GameBoy 也不例外,它包含一组根据可编程计划自动递增的寄存器。在本系列的这一部分中,我将研究计时器的结构和操作,以及如何使用它来播种伪随机翻译 2021-08-18 02:06:30 · 674 阅读 · 0 评论 -
Game boy模拟器(9):内存池
内存池内存池与延展MBCs and the cartridge headerMBC1的实现接下来到目前为止,在本系列中,我们一直在处理GameBoy的简单内存映射的加载和仿真,整个游戏 ROM 都适合内存的下半部分。完全适合内存的游戏并不多(俄罗斯方块是少数游戏之一);大多数游戏都比这大,并且必须采用独立机制将游戏 ROM 的“银行”交换到 GameBoy CPU 的视图中。GameBoy 库中的一些第一批游戏是在卡带内使用内存库控制器构建的,它完成了将 ROM 库交换到视图中的工作;一直以来,各种版本翻译 2021-08-18 01:29:13 · 417 阅读 · 0 评论 -
Game boy模拟器(8):中断
中断中断和中断处理程序中断的硬件实现CPU中断处理流程图GameBoy 中的中断实现:中断标志实现:中断处理下一次:更大的游戏在上一部分中,通过引入精灵,为模拟游戏奠定了基础。但是,仿真器缺少一个方面:垂直消隐中断。这部分会从整体上介绍中断,特别是实现消隐中断;完成此操作后,模拟器将运行俄罗斯方块。想象一下,您有一台带有网卡的计算机,以及一些处理来自网络的数据的软件。从计算机的角度来看,数据只是每隔一段时间就会进来,因此您需要某种方式让软件知道新数据已经到达。有两种方法可以实现:轮询:软件每隔一段时间翻译 2021-08-17 01:10:21 · 465 阅读 · 0 评论 -
Game boy模拟器(7):精灵
精灵简介:GameBoy 精灵精灵优先级精灵渲染的伪代码精灵数据:对象属性内存精灵的 OAM 数据MMU.js:OAM访问GPU.js: 精灵结构精灵调色板GPU.js:精灵调色板处理渲染精灵GPU.js:使用精灵渲染扫描线接下来在本系列之前,模拟器已扩展为启用键盘输入,这意味着可以玩井字游戏。这样做留下的问题是游戏必须盲目进行:没有指示下一步将在何处进行,也没有按键将您移动到游戏中的哪个位置。传统上,二维游戏机通过使用精灵解决了这个问题:可移动对象块可以独立于背景放置,并且包含与背景分开的数据。Gam翻译 2021-08-15 23:37:52 · 442 阅读 · 0 评论 -
Game boy模拟器(6):输入
这里写自定义目录标题键盘键盘的实现按键动作通过在前五个部分开发的工作仿真器和界面,仿真系统能够运行基本的测试 ROM,并生成图形输出。模拟器目前无法做的是将按键作为键盘输入,并将它们馈送到被测 ROM;为此,必须模拟键盘对 I/O 寄存器的影响。键盘GameBoy 有一个单一的输入方法,一个八键小键盘,可以按下任意数量的键。对于大多数键盘,按键排列在列和行的网格中:这些可以被视为导线,键之间可以形成连接。当其中一列被激活时,连接到该列的任何行也将被激活,并且硬件能够检测活动行以确定当前按下的键。在翻译 2021-08-12 01:41:55 · 347 阅读 · 0 评论 -
Game boy模拟器(5):集成
集成GPU寄存器实现:GPU 寄存器零页 I/O:GPU寄存器处理运行中的每帧index.html:模拟器界面jsGB.js:重置和调度测试在第 4 部分中,详细探讨了 GameBoy 的图形子系统,并将仿真放在一起。没有一套GPU的寄存器映射在软件中处理,图形子系统不能被仿真器使用;一旦这些寄存器可用,仿真器基本上就可以进行基本使用了。GPU寄存器GameBoy 的图形单元在内存映射的 I/O 空间中有一系列映射到内存中的寄存器。为了获得具有背景图像的工作仿真,GPU 将需要以下寄存器(其他寄存翻译 2021-08-08 22:20:17 · 502 阅读 · 0 评论 -
Game boy模拟器(4):图形
图形概述将 GameBoy 模拟器的形状放在一起,并在 CPU 和图形处理器之间建立了时序。画布已被初始化并准备好由模拟的 GameBoy 绘制图形;GPU 仿真现在具有结构,但仍无法将图形渲染到帧缓冲区。为了让仿真渲染图形,必须简要检查 GameBoy 图形背后的概念。概述就像那个时代的大多数游戏机一样,GameBoy 没有足够的内存来允许将直接帧缓冲区保存在内存中。...翻译 2021-08-07 00:58:14 · 685 阅读 · 0 评论 -
Game boy模拟器(3):GPU的时序
这里写自定义目录标题模拟屏幕光栅图形GPU 帧时序在本系列的前几部分中,已经布置了 GameBoy 模拟器的结构,并达到了可以加载游戏 ROM 的程度,并由模拟的 CPU 逐步完成。通过将仿真处理器连接到内存映射结构,现在可以将外围设备连接到系统。GameBoy 和任何游戏控制台使用的主要外围设备之一是图形处理器 (GPU):它是控制台的主要输出方法,处理器的大部分工作都在为 GPU 生成图形。模拟屏幕任天堂对 GameBoy 的内部名称是“点阵游戏”;它的显示器是尺寸为 160x144 的像素翻译 2021-08-03 02:00:24 · 684 阅读 · 0 评论 -
Game boy模拟器(2):运行内存
内存记忆体详细地查看内存区域[0000-3FFF] 卡带程序[0000-00FF] BIOS[0100-014F] 卡带头部[4000-7FFF] 卡带程序(其他)[8000-9FFF] 显存[A000-BFFF] 卡带(拓展)RAM[C000-DFFF] 运行内存RAM[E000-FDFF] 运行内存RAM(映射)[FE00-FE9F] 图形:角色信息[FF00-FF7F] 内存 I/O 映射[FF80-FFFF] 零页 RAM与 CPU 的接口加载 ROM下一步在本系列的前一部分中,计算机被介绍为一转载 2021-08-03 01:31:17 · 995 阅读 · 0 评论 -
Game boy模拟器(1):CPU
CPU模型内部状态值操作模拟内存接口调度和重置重置调度本文通过为模拟物理机的每个部分奠定基础,着手实现 GameBoy 模拟的基础。起点是CPU。模型计算机的传统模型是一个处理单元,由指令程序告诉它该做什么;程序可能会使用自己的特殊内存进行访问,也可能与普通内存位于同一区域,具体取决于计算机。每条指令都需要很短的时间来运行,并且它们都被一条一条地运行。从 CPU 的角度来看,计算机一打开就会启动一个循环,从内存中获取一条指令,计算出它所说的内容并执行它。为了跟踪 CPU 在程序中的位置,CPU翻译 2021-07-31 01:38:35 · 978 阅读 · 0 评论 -
Game boy模拟器:完整的 Z80 内核CPU源码
/** * jsGB: Z80 core * Imran Nazar, May 2009 * Notes: This is a GameBoy Z80, not a Z80. There are differences. * Bugs: If PC wraps at the top of memory, this will not be caught until the end of an instruction */Z80 = { _r: { a:0, b:0, c:0, d:0转载 2021-07-31 00:52:38 · 1072 阅读 · 0 评论 -
构建一个JPEG解码器(3):霍夫曼表
霍夫曼表简述重构即时霍夫曼算法JPEG DHT 段源代码jpeg.hjpeg.cppinttypes.hmain.cppMakefile接下来:读取比特流简述在上一部分中,我提到大多数 JPEG 文件在图像压缩之上采用了一种编码技术,试图从图像中去除任何冗余信息的痕迹。最常见的 JPEG 编码所使用的技术是对数据压缩世界中常见的一种技术的改编,称为霍夫曼编码,因此详细探索霍夫曼解码器的结构和实现是很有用的。因为霍夫曼编码是 JPEG 编码器在保存图像文件时执行的最后一件事,所以它需要我们的解码器做的第翻译 2021-07-31 00:39:51 · 1658 阅读 · 0 评论 -
构建一个JPEG解码器(2):文件结构
文件结构JPEG 图像的类型文件段实现:列出 JPEG 文件中的段源码:inttypes.h源码:jpeg.h源码:jpeg.cppJPEG 段列表的输出最后:检查扫描的编码在上一部分中,我们简要研究了 JPEG 用于压缩图像的技术。在检查这些技术的详细实现之前,查看 JPEG 文件的整体结构很有用,原因有二:编码器使用的一些过程使用值表,这些值表与图像信息本身一起存储,因此在需要它们之前将它们检索到内存中是明智的。我们还需要在某个地方放置图像解压缩算法的实现,并且有一个框架可以很好地处理这一点。翻译 2021-07-27 00:24:35 · 380 阅读 · 0 评论 -
实数的性质学习笔记
实数的性质定义1定义2实数x的n位不足近似实数x的n位过剩近似负实数x的n位过剩近似与不足近似命题定义1两个非负实数x = a0.a1a2 ⋯ an⋯y = b0.b1b2 ⋯ bn⋯\begin{array}{l}x\;=\;a_0.a_1a_2\;\cdots\;a_n\cdots\\y\;=\;b_0.b_1b_2\;\cdots\;b_n\cdots\end{array}x=a0.a1a2⋯an⋯y=b0.b1b2⋯bn⋯其中 a0,b0a_0,b_0a原创 2021-03-25 00:44:16 · 1164 阅读 · 0 评论 -
构建一个JPEG解码器(1):概念
构建一个JPEG解码器第一部分:概念第二部分:文件结构第三部分:霍夫曼表第四部分:帧和比特流本文是探索JPEG解码的概念和实现的系列文章。第一部分:概念构建一个JPEG解码器第二部分:文件结构第三部分:霍夫曼表第四部分:帧和比特流...翻译 2021-03-24 10:41:29 · 144 阅读 · 0 评论 -
随机数:梅森旋转算法
两个日本学者研究提出的伪随机数算法,在这个算法当中用到了梅森素数,所以称为梅森旋转算法。简单介绍一下梅森素数,梅森素数的意思是形如:2n−12^n-12n−1的素数。利用梅森素数的性质可以设计出周期长度为梅森素数长度的随机数周期。比如目前Python、C++11等语言当中用的随机数计算包都是用的这种算法。目前常用的版本周期是:219937−12^{19937}-1219937−1梅森旋转算法的周期非常非常长,但是仍不是安全的随机数算法,仍然有可能会被黑客破解。只不过和其他算法相比,被破解的概率以及难度增原创 2021-03-24 10:03:47 · 2055 阅读 · 0 评论 -
随机数:LCG算法
冯诺依曼的随机数算法虽然看起来简单,但是非常草率,在很多场合下是显然不能使用的。所以人们又想出了新的算法,这个算法也很简单,看起来英文缩写高大上,其实翻译过来是线性同余法。也就是利用 ax+b mod c来生成随机数。最后返回的结果是上述式子计算之后的结果,abc三个数都是我们选定的参数。当下一次随机的时候,就将上次的结果作为新的种子进行计算。我们写出它的递推公式就是:xn+1 =(aXn + b) mod cx_{n+1\;}=\left(aX_n\;+\;b\right)\;mod\;cx原创 2021-03-24 00:58:25 · 1987 阅读 · 0 评论 -
随机数:平方取中法
随机数的平方取中法,这个方法非常简单粗暴,是用来产生四位随机数的。首先取需要一个随机种子,比如2333,我们把这个随机种子进行平方,得到5442889。这个数一共有7位,我们给它左边填充一个0变成05442889,最后取出它的中间四位是4428,这就是我们随机得到的结果。当我们下次再计算随机数的时候,随机数的种子就成了4428。这个算法的作者是大名鼎鼎的计算机之父冯诺依曼,自从他确定了计算机体系结构之后一直沿用至今。他当时推崇这一算法的原因很简单,计算方便,速度快,也容易排查错误。它认为如果真的设计一个原创 2021-03-19 13:32:57 · 2530 阅读 · 0 评论