白话B样条曲线(一)

很多介绍B样条曲线的文章,上来就是给出了公式,让想学习新手云里雾里。有的即使已经用到程序中了,也不一定明白这个曲线构造的原理。这不该是一个有意思的事情该有的样子,本文试图通过一些普通的案例,带大家一步一步地走进B样条曲线。

首先,考虑下面的问题:给定二维平面上的一组点(X i,Y i),求横坐标为x的某点的y值。
抛开已有的各种方法,如果让你把这个当做一个新问题研究的话,你会如何考虑呢?
1、找一条函数曲线,经过这些给定点,或尽可能经过这些给定点的附近,然后把待求的x代入曲线方程,求出y。
但是这种方法不具有普适性。比如说你知道了这个曲线大概是个直线,就可以用最小二乘法拟合出一条直线。如果你不知道这些曲线的类型呢?
生活、工作中的很多事物的关系并不是这么简单的,可能是直线,可能是多项式,也可能是三角函、幂函数等等,还可能是多种函数的组合。
2、抛开已知类型的曲线类型,从概率统计的角度进行考虑。
我们知道给定点中的每个点都会对未知x的y值产生影响,那个每个点的影响有多大呢?这个影响该如何度量呢?
人们很直观的一个认识就是,距离这个x越近的x对它y值产生的影响越大。不妨用距离的倒数作为权值。
在这里插入图片描述
如果你想让这个距离的影响更大些,可以用距离倒数的高次幂来修改公式,如果你想让距离的影响自然平滑些,可以把距离倒数代入高斯正态分布曲线。
这种方法很淳朴自然,而且应用也很广泛,叫做反距离权重插值(IDW:Inverse Distance Weighted)。
这种方法简单、易用,而且万能,但普适的方法往往对于具体的问题并不是最优的。
比如说对于上面的问题,一个比较有名的方法就是克里金插值法(Kriging method)。这是以南非矿业的一个工程师名字命名的方法,也是地质统计学的核心。
相比反距离插值反距离插值 IDW,克里金插值公式更加抽象:
在这里插入图片描述
这里的 λi是权重系数。它同样是用空间上所有已知点的数据加权求和来估计未知点的值。但权重系数并非距离的倒数,而是能够满足点 (xo,yo)处的估计值与真实值 zo的方差最小的一套最优系数,即::
同时满足无偏估计的条件:
在这里插入图片描述
看似复杂,实际是对给定点又加了一些约束。类似最小二乘法去除离群点一样,这些约束也是为了使得离群点对预测点的影响最小。比如说在预测点附近刚好有个样本点,而这个样本点刚好采样误差很大,如果直接用距离的倒数作为权值会有很大偏差。
克里金插值法的具体原理就不介绍了,有兴趣的可以自己去研究。
这种加权的方法在其它很多地方也都有应用,比如说图像处理中的滤波:为了消除个别像素点的颜色深度太突兀,就听过它周边的一些点的像素深度对它进行修正,有取中值的,有取最大最小值的,有取均值的,有按照某些曲线按距离加权的。本质上这也是用已知点的信息对其它点进行影响。
以上算是引子吧,大家了解了一下这些插值拟合的背景,下面就该大聪明(数学家)出场了,让我们感受一下这些“大家”们是如何思考问题的。

# 题目重述 你现在有个服务器和台 PC,网络信息如下: - **服务器 IP**:`192.168.78.100` - **PC 的 IP**:`192.168.78.200` - **子网掩码**:`255.255.255.0`(也就是前3段样的设备在个局域网) - **网关**:`192.168.78.2`(数据出去的“大门”) 你的任务是: 1. 把服务器配置好; 2. 让它能自动给 PC 分配 IP; 3. 允许 PC 上的普通用户远程登录服务器; 4. 把服务器变成个“内部软件商店”,让 PC 能从它那里安装 `zsh` 这个软件。 下面我会**用大白话条写命令,并每条都加中文注释**,保证你每步都知道在干啥! --- # 详解(全白话 + 每条命令都有注释) --- ## ✅ 第步:在服务器上设置固定 IP 地址 > 📌 目标:让服务器永远使用 `$192.168.78.100$`,别乱变。 ```bash # 查看当前网络连接叫什么名字(般是 "System eth0" 或类似) # 因为不同系统名字不样,必须先确认 nmcli con show ``` ```bash # 修改网络连接(假设名字是 "System eth0") # 如果你看到的是别的名字,比如 "ens33",就换成那个名字 nmcli con mod "System eth0" \ ipv4.addresses 192.168.78.100/24 \ # 设置IP地址和子网:前三段相同就算家人 ipv4.gateway 192.168.78.2 \ # 网关,就是上网要经过的路由器地址 ipv4.dns "8.8.8.8" \ # DNS:把网址(如baidu.com)翻译成IP用的 ipv4.method manual # 手动设IP,不自动获取(否则会冲突) ``` ```bash # 激活刚才的设置,让它生效 nmcli con up "System eth0" ``` ✅ 成功后可以用这条命令检查: ```bash ip addr show # 看有没有出现 192.168.78.100 ``` --- ## ✅ 第二步:挂载光盘,配置本地 YUM 源(离线装软件的基础) > 📌 目标:把系统安装盘当“本地软件市场”,以后不用联网也能装软件。 ```bash # 把光盘(ISO镜像)挂载到 /mnt 目录下 # 就像Windows里“打开D盘”,Linux里要先“挂上去”才能用 mount /dev/cdrom /mnt ``` ```bash # 删除原来所有的 .repo 文件(避免旧配置干扰) # /etc/yum.repos.d/ 是专门放软件源的地方 rm -rf /etc/yum.repos.d/* ``` ```bash # 创建个新的 repo 文件,告诉系统:“我的软件在这儿!” cat > /etc/yum.repos.d/local.repo << 'EOF' [local] # 给这个源起个名字,叫 local name=Local CentOS Repository # 人类看得懂的名字 baseurl=file:///mnt # 软件在哪?就在 /mnt 这个目录里(就是光盘内容) enabled=1 # 是否启用?1 表示开启 gpgcheck=0 # 是否验证签名?0 表示跳过(教学环境可以关) EOF # 结束输入 ``` ```bash # 清空 yum 缓存(旧的记忆) yum clean all ``` ```bash # 重新扫描光盘里的所有软件包,建立新索引 # 就像手机刷新相册样 yum makecache ``` ✅ 测试是否成功: ```bash yum list | grep zsh # 如果能看到 zsh.x86_64 出现,说明源配置成功了! ``` --- ## ✅ 第三步:把服务器变成 DHCP 服务器(自动发 IP 给别人) > 📌 目标:让服务器当“物业管理员”,自动给局域网里的电脑分配 IP 地址。 > 特别要求:指定某台 PC(通过 MAC 地址识别)永远拿到 `$192.168.78.200$` ### 1. 安装 dhcp 软件 ```bash # 安装 dhcpd 服务程序(DHCP 服务器软件) yum install dhcp -y ``` ### 2. 清空原来的配置文件 ```bash # 清空默认的 dhcpd.conf 文件(保险起见) > /etc/dhcp/dhcpd.conf ``` ### 3. 写入新的 DHCP 配置 ```bash cat >> /etc/dhcp/dhcpd.conf << 'EOF' # 全局设置 —— 对所有客户端生效 option domain-name "office.local"; # 局域网域名(可选) option domain-name-servers 8.8.8.8; # 上网查网站时用的DNS服务器 default-lease-time 600; # 默认租期:10分钟(不够可以再续) max-lease-time 7200; # 最长租期:2小时 authoritative; # 我才是唯的DHCP,别人别抢活干 # 定义个子网范围:192.168.78.0/24 subnet 192.168.78.0 netmask 255.255.255.0 { range 192.168.78.101 192.168.78.199; # 动态IP池:给普通设备随机分配 option routers 192.168.78.2; # 默认网关 option broadcast-address 192.168.78.255; # 广播地址(发消息给所有人用) } # 特殊客户:固定分配IP(根据MAC地址绑定) host pc-client { hardware ethernet aa:bb:cc:dd:ee:ff; # 👈 替换成你PC的真实MAC地址! fixed-address 192.168.78.200; # 永远给他这个IP } EOF ``` > 🔍 怎么查 PC 的 MAC 地址? 在 PC 上运行: ```bash ip link show # 找 eth0 或 ens33 那行,link/ether 后面那串就是MAC ``` ### 4. 启动 DHCP 服务 ```bash # 开机自启 + 立刻启动 systemctl enable dhcpd --now ``` ```bash # 查看状态,看是不是绿色 active (running) systemctl status dhcpd ``` ✅ 测试方法: 在 PC 上设置“自动获取 IP”: ```bash nmcli con down "System eth0" && nmcli con up "System eth0" ip addr show ``` 应该能拿到 `$192.168.78.200$`。 --- ## ✅ 第四步:允许非 root 用户通过 SSH 登录服务器(更安全) > 📌 目标:不能直接用 root 登录(太危险),而是创建个普通用户来管理。 ### 1. 创建普通用户 ```bash # 创建个叫 admin 的用户 useradd admin ``` ```bash # 给他设密码:Admin@123 # 格式:用户名:密码 echo "admin:Admin@123" | chpasswd ``` ### 2. 让他有管理员权限(能执行 sudo 命令) ```bash # 把 admin 加入 wheel 组(CentOS 中这个组的人可以用 sudo) usermod -aG wheel admin ``` ### 3. 安装 SSH 服务(大多数系统自带,但保险起见装下) ```bash # 安装 OpenSSH 服务器程序 yum install openssh-server -y ``` ```bash # 设置开机自启 + 立刻启动 systemctl enable sshd --now ``` ### 4. 修改 SSH 安全配置(禁止 root 登录) ```bash # 用 vim 编辑 SSH 配置文件 vim /etc/ssh/sshd_config ``` 找到这三行,改成这样: ```conf PermitRootLogin no # ❌ 禁止 root 登录(防止黑客爆破) PasswordAuthentication yes # ✅ 允许密码登录(测试阶段可用) AllowUsers admin # ✅ 只允许 admin 用户登录 ``` 保存退出(按 `Esc`,输入 `:wq` 回车) ### 5. 重启 SSH 服务使配置生效 ```bash # 重启 SSH 服务 systemctl restart sshd ``` > ⚠️ 注意:不要断开当前连接!新开个终端测试登录! ### 6. 在 PC 上测试登录 在 PC 上运行: ```bash ssh admin@192.168.78.100 ``` 输入密码 `Admin@123`,如果能登录,说明成功! 试试提权命令: ```bash sudo yum install tree -y ``` ✅ 成功能说明权限没问题。 --- ## ✅ 第五步:搭建 HTTP 软件仓库(让 PC 能从服务器装 zsh) > 📌 目标:把服务器变成“内部软件站”,PC 不联网也能安装软件。 ### 1. 安装 Web 服务器(Apache) ```bash # 安装 httpd(Apache 服务器) yum install httpd -y ``` ```bash # 开机自启 + 立刻启动 systemctl enable httpd --now ``` ### 2. 创建软件仓库目录并复制 zsh 包 ```bash # 创建网页下的软件目录 mkdir -p /var/www/html/repo ``` ```bash # 把光盘里的 zsh 相关 rpm 包复制进去 cp /mnt/Packages/zsh-* /var/www/html/repo/ ``` > 💡 如果提示找不到 zsh 包,说明光盘没带,可以用 yum 下载: ```bash yum install yum-utils -y yumdownloader --destdir=/var/www/html/repo zsh --resolve ``` ### 3. 生成软件索引(关键!不然 yum 找不到东西) ```bash # 安装 createrepo 工具(用来生成软件列表) yum install createrepo -y ``` ```bash # 扫描目录中的所有 rpm 包,生成 metadata 索引文件 createrepo /var/www/html/repo ``` ### 4. 放行防火墙(允许别人访问80端口) ```bash # 永久允许 HTTP 服务通过防火墙 firewall-cmd --permanent --add-service=http ``` ```bash # 刷新防火墙规则 firewall-cmd --reload ``` ✅ 验证: 在浏览器中访问: 👉 `http://192.168.78.100/repo` 你应该能看到 `zsh-*.rpm` 文件列表。 --- ## ✅ 第六步:在 PC 上配置 repo 文件并安装 zsh > 📌 目标:让 PC 使用服务器提供的 HTTP 软件源安装 zsh ### 在 PC 上操作: ```bash # 创建个新的 repo 配置文件 cat > /etc/yum.repos.d/internal-http.repo << 'EOF' [internal-http] # 源的名字 name=Internal HTTP YUM Repo # 描述:这是内部HTTP源 baseurl=http://192.168.78.100/repo # 软件在哪?在server的这个网址上 enabled=1 # 是否启用?1 表示是 gpgcheck=0 # 是否验证?0 表示跳过(教学环境方便) EOF ``` ```bash # 清空旧缓存 yum clean all ``` ```bash # 重新加载软件列表 yum makecache ``` ```bash # 安装 zsh 软件 yum install zsh -y ``` ✅ 成功标志:zsh 安装成功,没有任何报错! 你还可以切换默认 shell: ```bash chsh -s /bin/zsh ``` 下次登录就是更强大、更好看的 zsh 终端啦! --- # ✅ 总结流程(建议顺序执行) | 步骤 | 哪台机器 | 做什么 | |------|--------|--------| | 1 | Server | 设静态 IP `192.168.78.100` | | 2 | Server | 挂载光盘,建本地源 | | 3 | Server | 配置 DHCP,固定分配 `192.168.78.200` 给 PC | | 4 | Server | 创建 admin 用户,禁止 root 登录 SSH | | 5 | Server | 建 HTTP 软件仓库,放 zsh 包 | | 6 | PC | 自动获取 IP,确认拿到 `192.168.78.200` | | 7 | PC | 配置 repo,安装 zsh | --- # 知识点 1. **Linux网络与服务配置** 掌握静态IP、路由、DNS设置,理解systemd服务管理机制。 2. **YUM源管理原理** 理解本地/HTTP/FTP仓库结构,掌握createrepo和.repo语法。 3. **SSH安全远程管理** 熟悉密码与密钥认证、端口更改、访问控制,保障远程操作安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码猿杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值