算法与数据结构回顾 – 广义表

算法与数据结构回顾 – 广义表

图源:吟游诗人-狼娘 月巴小鹅 111776313

简述

广义表是线性表的一种推广。线性表要求表中元素拥有统一的类型,而广义表无此限制。需要注意的是,广义表和线性表长度一般认为是有限的,但广义表的深度可以是无限的(即递归表)。

广义表是一种数据结构。对广义表的常见操作包括:

  • 创建
  • 从字符串形式创建
  • 销毁
  • 复制
  • 取表头
  • 取表尾
  • 判空
  • 求长度
  • 求深度
  • 从表头插入
  • 从表头删除
  • 遍历

广义表是Lisp语言的基本数据结构。后文以Common Lisp和C++给出各基本操作的示例。

阅读更多
计算机图形学笔记 Part.1

计算机图形学笔记 Part.1

图源:《Magnet》Matcha_ 102235547

本系列笔记为结合了个人理解的非初学者向笔记,包括《CMU 15-462》、《Games 101:现代计算机图形学入门》、《Games 102:几何建模与处理》、《Introduction to 3D Game Programming with DirectX 12》等数个知识来源。

基础介绍

什么是计算机图形学

计算机图形学:利用计算机合成视觉信息或利用计算机合成/操控感官信息的学科。

计算机图形学的应用

  • 影视
  • 动画
  • 游戏
  • 数据可视化
  • 工业设计,平面设计
  • 数字绘画
  • 虚拟现实
    • 虚拟现实(VR):指所看到的一切均为虚拟的,比如虚拟现实游戏、虚拟现实视频等。
    • 增强现实(AR):指看到的是真实的现实 + 虚拟的、对当前现实进行分析处理或修改等生成的虚拟事物,比如Apple ARkit。
    • 混合现实(MR):VR + AR,使用类似VR的手段,达到AR这种结合当前现实与虚拟事物的效果,比如Hololens。
  • 制造业(3D打印)
  • 模拟与数字孪生
  • 排版与字体设计
    • “The Quick Brown Fox Jumps Over The Lazy Dog”:一句有意义的英文句子,内含全部的26个英文字母,常用来对字体(字形、字号、间距等)进行测试。
    • “Lorem ipsum dolor sit amet, consectetur adipisicing elit.”:又叫“乱数假文”或者“哑元文本”。主要的目的为测试文章或文字在不同字型、版型下看起来的效果。更多资料请查阅:https://cn.lipsum.com/

计算机图形学与计算机视觉的区别

  • 计算机图形学:将数据转化为图形。也就是“画出来”。
  • 计算机视觉:将图形转化为数据。也就是“看到”。

计算机图形学需要哪些基础

  • 表示方法(编码)
  • 采样与混叠
  • 数学方法(表示三位物体和动作)
  • 光线
  • 透视

展示一个正方体

  • 如何表示
    • 顶点:利用坐标
    • 边:利用边的两个顶点唯一确定
  • 如何绘制
    • 三维图形转化为二维图形:小孔成像模型
      • 设相机坐标为 $(a,b,c)$ ,待确定点的坐标为 $(x,y,z)$ 。要得到该点在二维平面上的坐标,可进行如下算法步骤:
        1. $(x,y,z)$ 与 $(a,b,c)$ 相减,得到原三维点与摄像机的相对位置;
        1. 将其中的 $(x,y)$ 与 $z$ 相除,得到 $(\frac{x}{z},\frac{y}{z})$,即是所求的 $(u,v)$。
    • 连线。这就要细说到电脑如何绘制直线。
阅读更多
Flathub简介,以及如何制作Flathub镜像

Flathub简介,以及如何制作Flathub镜像

图片来源:@Lifeline 88401620

什么是Flathub?

  • Flathub之于Flatpak,正如Snapcraft之于Snap
    • 类似于“官方Repo”,但是由社区维护
    • 与AUR不同,Flathub存储了软件的二进制文件,而不只是构建文件
    • Flathub有着自己的大型CI集群Flathub Buildbot
  • 安装发行版上的Flatpak时,不一定默认启用Flathub,需要手动查看和添加

启用Flathub

  • 查看已经启用的源
1
flatpak remotes
  • 如果没有flathub源,就需要手动添加
  • 添加Flathub源
1
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  • 随后就可以安装Flathub中的软件包了
阅读更多
Linux&Windows小技巧(4)

Linux&Windows小技巧(4)

文章内容:清空iptables,清理docker image,给Wayland下的Chromium/Edge浏览器开启GPU加速

图源:《失われた深淵・宵宫》 @void_0 100377150

清空iptables规则

使用场景:在需要完全重建iptables规则,或是使用其他软件代替/包装iptables(如firewalld)时。

常见的两种清空iptables规则的方法是:

  1. 手动给每一条规则都执行iptables -D
    • 针对默认表,iptables -D <chain_name> ...
    • 针对其他表,iptables -t <table_name> -D <table_name> ...
  2. 查找规则在表的链中是第几条(Line Number),用条目序号进行删除
    • 找条目序号:iptables [-t <table_name>] -L --line-number
    • 使用条目序号进行删除:iptables [-t <table_name>] -D <chain_name> <line_nuber>

但也可以使用下面的方法批量删除:

1
2
3
4
5
6
7
8
9
10
11
# 如果iptables的默认规则不是ACCEPT,为了防止清除后主机拒绝一切数据包,将所有内置链的默认规则设置为ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# 删除所有默认表中的rules
iptables -F
# 删除指定的其他表中的rules
iptables -t <table_name> -F
# 删除默认表中所有user-defined chain(因为此时所有chain均为空)
iptables -X
阅读更多
Flatpak概念及其基础使用方法

Flatpak概念及其基础使用方法

图源:陌芋Marginal 🎆🎇🎆 108115520

为什么使用Flatpak?

  • 问题:已经有了aptdnf等这种系统级的包管理器,为什么还要使用Flatpak?
    1. Flatpak给软件提供相对独立的运行环境(沙箱),并提供权限控制功能,避免软件破坏或任意修改系统;
    2. Flatpak很大程度上解决了软件的兼容性问题,让“新系统跑旧软件”或“旧系统跑新软件”成为可能;因此Flatpak可以在非滚动更新的发行版上安装 比系统源内版本更高的软件;
    3. Flatpak支持诸多发行版,在不同的发行版上能够获得几乎相同的软件使用体验
    4. Flatpak允许同一个软件的不同版本在系统内共存
    5. Flatpak允许非root用户在单用户作用域内安装软件
  • 问题:我在用Snap或者AppImage,它们和Flatpak有什么区别嘛?
    1. Flatpak性能中等,略优于Snap,略差于AppImage;
    2. Flatpak、AppImage不需要服务(Service),而Snap需要Snapd;
    3. Flatpak、Snap提供权限控制功能,而AppImage不提供;
    4. Flatpak、Snap统一提供所有软件包的更新,而AppImage需要打包者自行适配应用内更新或利用第三方工具更新;
    5. Flatpak、Snap在发行版的预装情况方面有区别:
      • Flatpak预装在这些发行版中:
        • Fedora (Workstation/Silverblue/Kinoite)
        • Manjaro
        • Endless OS
        • Linux Mint
        • Rocky Linux (GNOME)
        • AlmaLinux (GNOME)
        • CentOS (GNOME)
        • EuroLinux (GNOME)
        • Pop!_OS
        • elementary OS
        • Clear Linux (Desktop)
        • PureOS
        • Zorin OS
        • MX Linux
        • KDE neon
        • ……
      • 而Snap预装在这些发行版中:
        • Ubuntu系列 (Ubuntu Desktop, Ubuntu Server, KUbuntu, XUbuntu……)
        • KDE neon
        • Manjaro
        • Solus
        • Zorin OS
        • ……
    6. Flatpak和Snap均得到了两个软件中心(GNOME Software Center、KDE Plasma Discover)的支持,而Appimage需要使用第三方软件中心(如prateekmedia/appimagepoolapp-outlet/app-outlet(同样支持Flatpak)
阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×