形状王国与几何语言:对象、属性与表征
在“几何重建”的旅途中,我们首先需要一门足够精确的语言:它既能让人凭直觉认出“这是一座塔、那是一条路”,也能让人用性质把对象钉死在概念框架里,最终还能把这些描述落到可计算、可验证的公式与算法上。可以把几何世界想象成一座“形状王国”:王国的疆域绘在地图上,城堡、桥梁与街区列在建筑清单里。地图与清单的共同点是——它们都在描述“对象是什么”,以及“对象有多大、多陡、多远、多占地方”。本章的任务,就是建立全书的形式化框架:区分图形对象与度量属性,明确平面与空间的基本概念与记号体系,并用“王国地图—建筑清单”的连续例子,展示几何描述的三种层次:直观识别、性质刻画、计算验证。
几何语言的两大词类:对象与属性
术语:图形对象(Shape / Geometric Object)<a id="term-shape"></a>
> 定义(图形对象):在给定几何空间中可被指认、可被比较、可被操作的“形状实体”,例如点、线、圆、三角形、多面体、曲面,以及由这些元素组成的复合体。图形对象回答“是什么”。(标签:#definition #term #object)
> 例证:王国地图上标出三座瞭望塔的位置。每一座塔在地图上可抽象为一个点;塔与塔之间的道路可抽象为线段或折线;城墙的轮廓可抽象为多边形边界。(标签:#example #object)
> 练习:在你熟悉的场景中(教室、街区或手机屏幕),列出至少 6 个可被视为图形对象的事物,并说明你更倾向于把它们抽象成点、线、面还是体。要求每个事物给出一句抽象理由。(标签:#exercise #object)
术语:度量属性(Metric Attribute)<a id="term-metric"></a>
> 定义(度量属性):对图形对象进行“量化刻画”的数值或结构化量,例如长度、角度、面积、体积、曲率、距离、夹角、法向等。度量属性回答“有多少”。(标签:#definition #term #property)
> 例证:同样是一段道路(线段对象),它可以有长度 $L$;同样是一片广场(多边形对象),它可以有面积 $S$;同样是两条街道交汇(两条射线对象),它们可以形成夹角 $\theta$。(标签:#example #property)
> 练习:给定“王国城门拱形的轮廓是一段圆弧”。写出该对象至少 4 个可能关心的度量属性,并说明其中哪些属性在“修建”与“导航”任务中更关键。(标签:#exercise #property)
对象—属性分离:为什么这是重建问题的根基
几何重建的典型任务不是“凭空创造形状”,而是从不完整的观测(图像、点云、测距、草图、文本描述)推断对象,并同时估计其属性。若不区分对象与属性,推理过程会混乱:例如“这是一条直线”属于对象层判断,而“这条线的长度为 20 米”属于属性层估计;前者涉及类别与结构,后者涉及数值与单位。二者常相互制约:把一段边界判断为“圆”之后,半径就成为关键属性;把结构判断为“矩形房间”之后,直角与平行关系约束了长度的可能范围。
> 旁注(数字版阅读提示):对象—属性分离对应许多工程系统的“几何核 + 参数”设计。例如 CAD 中常把圆表示为“中心 + 半径”,把平面表示为“法向 + 偏移”。这种表示方式既便于编辑,也便于约束求解。(标签:#sidebar #digital)
平面与空间:王国地图与建筑清单的两种舞台
术语:平面(Plane)与欧氏平面 $\mathbb{E}^2$ <a id="term-plane"></a>
> 定义(平面):满足欧氏几何公理的一种二维连续空间,可用坐标对 $(x,y)$ 表示位置。我们用 $\mathbb{E}^2$ 表示欧氏平面。(标签:#definition #term #space)
> 例证:王国地图通常被视为平面对象:把地形起伏忽略或压缩成符号(等高线、坡度标记),主要几何关系发生在二维。(标签:#example #space)
> 练习:说明为什么“地图是二维的”并不意味着“现实是二维的”。请用“信息压缩”的角度解释二维地图如何保留关键几何信息,又丢失了哪些与三维相关的属性。(标签:#exercise #space)
术语:空间(Space)与欧氏空间 $\mathbb{E}^3$ <a id="term-space"></a>
> 定义(空间):满足欧氏几何公理的三维连续空间,可用坐标三元组 $(x,y,z)$ 表示位置。我们用 $\mathbb{E}^3$ 表示欧氏空间。(标签:#definition #term #space)
> 例证:建筑清单关心墙体厚度、梁柱高度、拱顶曲面,因而其核心对象与属性天然属于三维。(标签:#example #space)
> 练习:举例说明同一对象在二维与三维中的“表示差异”。例如一根旗杆:在地图上它可能是一个点,而在建筑模型中它是一个圆柱体。列出至少 3 个因此改变的可计算属性。(标签:#exercise #space)
从二维到三维:表征方式的“维度代价”
在 $\mathbb{E}^2$ 中,用点与线段即可表达大量结构;在 $\mathbb{E}^3$ 中,同样的结构需要面与体来承载。维度提升带来三类代价:
1. 数据量增长:用三角网表示曲面时,面片数量随精度快速增加;工程中常见的 STL 模型完全由三角形拼合,精细模型可能包含数十万乃至数百万三角形面片。 2. 歧义性增加:二维投影可能把不同三维形状映射为相同轮廓(例如不同高度的台阶在正上方投影相同)。 3. 约束与计算更复杂:三维中的相交、遮挡、法向、曲率会显著增加计算与推理难度。
这些差异解释了为何本书将反复强调“对象—属性—表征”的分层:分层越清晰,维度代价越可控。
记号体系:把直觉变成可演算的句子
本书采用尽量标准的欧氏几何记号,并在需要计算验证时引入坐标与向量语言。读者可以把它理解为一套“王国通用文书格式”:地图测绘员、建筑师与审计官(验证者)都按同样的格式书写与核对。
术语:点、线、线段、射线 <a id="term-primitives"></a>
> 定义(点):几何空间中的位置,不带大小。记作 $A,B,C$ 等。(标签:#definition #term #object)
> 定义(直线):无限延伸的一维对象,由两点确定。记作 $\overleftrightarrow{AB}$ 或 $l$。(标签:#definition #term #object)
> 定义(线段):连接两点且包含其间所有点的有限部分。记作 $\overline{AB}$,长度记作 $|AB|$。(标签:#definition #term #object #property)
> 定义(射线):从一点出发、沿某方向无限延伸。记作 $\overrightarrow{AB}$。(标签:#definition #term #object)
> 例证:在王国地图上,城堡 $A$ 与港口 $B$ 的“直达道路”可抽象为线段 $\overline{AB}$;若只知从 $A$ 出发沿某方向一直走,则可用射线 $\overrightarrow{AB}$ 表示方向信息。(标签:#example #object)
> 练习:解释“直线由两点确定”在计算机表示中的含义:当点的坐标存在测量误差时,一条直线该如何被估计?提示:可从“最小二乘拟合”或“误差模型”角度思考。(标签:#exercise #object #reconstruction)
术语:角与垂直、平行 <a id="term-angle"></a>
> 定义(角):由两条射线(或两条线段)在同一顶点处形成的开口,记作 $\angle ABC$,顶点为 $B$。角度记作 $\measuredangle ABC$ 或 $\angle ABC$ 的数值。(标签:#definition #term #property)
> 定义(平行):在平面内两条直线不相交,记作 $l_1 \parallel l_2$。(标签:#definition #term #property)
> 定义(垂直):两条直线夹角为 $90^\circ$,记作 $l_1 \perp l_2$。(标签:#definition #term #property)
> 例证:建筑清单中的“矩形窗框”不仅是四边形对象,还蕴含两组平行与四个直角的性质集合。(标签:#example #property)
> 练习:给出一个四边形 $ABCD$。仅用“平行、垂直、等长”等性质描述,写出两套不同的性质集合,使其分别足以推出“$ABCD$ 是矩形”与“$ABCD$ 是菱形”。比较两套集合的冗余度。(标签:#exercise #property #logic)
术语:坐标、向量与距离 <a id="term-coordinate"></a>
> 定义(坐标表示):在 $\mathbb{E}^2$ 中点 $A$ 可表示为 $A(x_A,y_A)$;在 $\mathbb{E}^3$ 中为 $A(x_A,y_A,z_A)$。(标签:#definition #term #representation)
> 定义(向量):表示位移与方向的量。向量 $\vec{AB}=B-A$(坐标相减)。(标签:#definition #term #representation)
> 定义(欧氏距离):平面中 > $$ > |AB|=\sqrt{(x_A-x_B)^2+(y_A-y_B)^2}, > $$ > 空间中 > $$ > |AB|=\sqrt{(x_A-x_B)^2+(y_A-y_B)^2+(z_A-z_B)^2}. > $$ > (标签:#definition #term #property #formula)
> 例证:地图上两座塔 $A(1,2)$、$B(5,5)$ 的直线距离可直接计算。这一步把“感觉上很远”转化为可核对的数值。(标签:#example #formula)
> 练习:某条道路由三段折线连接 $A\to P\to Q\to B$。说明“道路总长”与“直线距离 $|AB|$”的差异属于哪一类信息(对象/属性/表征),并给出一个数值例子使两者差异尽可能大。(标签:#exercise #property #representation)
> 旁注(面向机器的 Markdown 结构提示):后续章节涉及“从数据重建形状”时,坐标与向量将成为统一接口:它们把几何约束写成方程/不等式,把验证写成可重复的计算流程。(标签:#sidebar #agent)
几何描述的三种层次:识别—刻画—验证
仅有对象名词与属性名词仍不够。几何推理通常经历三个层次:从“看见”到“说清”,再到“算对”。我们以王国地图与建筑清单贯穿说明。
```mermaid graph TD A[直观识别<br/>“像什么”】【标签:#level1】 --> B[性质刻画<br/>“满足什么”】【标签:#level2】 B --> C[计算验证<br/>“算得对”】【标签:#level3】 C --> D[可复用结论<br/>“可迁移”】【标签:#level4】 ```
第一层:直观识别(Intuitive Recognition)
直观识别是人类视觉与经验系统最擅长的部分:我们能迅速判断“这是圆形广场”“那是三角屋顶”。但直观识别存在两类局限:其一,边界情况(近似圆、近似直角)容易误判;其二,不同人对“像”的阈值不同,难以达成一致。
> 例证(王国地图):测绘员指着地图说:“这条护城河绕城一圈,基本是圆的。”这是一句直观识别式陈述。它有效,但含糊:是圆、椭圆,还是多边形近似?“基本”意味着误差多大?(标签:#example #level1)
> 练习:找一张包含圆形或矩形元素的图片(任意来源均可),仅凭肉眼给出“它是圆/矩形”的判断,并列出至少 3 个你感到不确定的细节。说明这些不确定性会在后续计算中造成什么风险。(标签:#exercise #level1)
第二层:性质刻画(Property Characterization)
性质刻画把对象固定在逻辑框架里。所谓“刻画”,就是给出一组性质,使得满足这些性质的对象类别尽量唯一,并且这些性质可被进一步用于推理或计算。
> 定义(性质集合):用于描述某类对象的若干性质(关系或约束)的集合,记为 $\mathcal{C}=\{c_1,c_2,\dots\}$。若对象 $X$ 满足全部性质,记作 $X\models \mathcal{C}$。(标签:#definition #term #property #logic)
> 例证(建筑清单): > “窗框是矩形”可以被刻画为:对四边形 $ABCD$,有 $AB\parallel CD$、$BC\parallel AD$ 且 $AB\perp BC$。也可以刻画为:四个角相等且对边等长。不同刻画在计算时的便利性不同。(标签:#example #property #logic)
> 练习:给出“圆”的两种性质刻画:一种偏向纯几何(不使用坐标),一种偏向解析几何(使用方程)。比较它们在“从噪声数据拟合圆”时的适用性。(标签:#exercise #property #representation)
第三层:计算验证(Computational Verification)
计算验证要求把性质落到可执行的检查:输入数据(坐标、边长、角度、测量值),输出“通过/不通过”或误差大小。它是几何重建中最关键的“审计官”角色:当直观与刻画发生冲突时,验证结果提供可复核的裁决依据。
> 例证(从刻画到验证):若要验证四边形 $ABCD$ 是否为矩形,在坐标已知时可用向量点积: > 设 $\vec{AB}=B-A$、$\vec{BC}=C-B$,若 $\vec{AB}\cdot \vec{BC}=0$ 则 $AB\perp BC$。再检查平行性或对边等长即可。(标签:#example #verification #formula)
> 练习(算法化表达):写出一个“矩形验证器”的伪代码或任意语言代码:输入四点坐标,输出是否为矩形。要求显式处理“近似矩形”的情况:给出容差 $\varepsilon$ 并解释其意义。(标签:#exercise #verification #algorithm)
下面给出一个最小化的 Python 风格示例,用于表达“验证是可执行文本”的思想(并非要求读者具备编程背景;把它当作结构化步骤即可):
```python import math
def dot(u, v): return u[0]*v[0] + u[1]*v[1]
def sub(a, b): return (a[0]-b[0], a[1]-b[1])
def is_rectangle(A, B, C, D, eps=1e-6): AB = sub(B, A) BC = sub(C, B) CD = sub(D, C) DA = sub(A, D)
直角:AB ⟂ BC
right = abs(dot(AB, BC)) <= eps
平行:AB ∥ CD 且 BC ∥ DA(用叉积的二维等价判断也可)
parallel1 = abs(dot(AB, CD) + math.sqrt(dot(AB, AB)*dot(CD, CD))) <= 1e-3 parallel2 = abs(dot(BC, DA) + math.sqrt(dot(BC, BC)*dot(DA, DA))) <= 1e-3 return right and parallel1 and parallel2 ```
> 旁注(容差的哲学):在真实测量或重建数据中,“等于 0”常应理解为“足够接近 0”。容差 $\varepsilon$ 的选择不是纯数学问题,而是任务与噪声模型共同决定的工程问题。本书后续会在重建章节中反复讨论这一点。(标签:#sidebar #reconstruction #verification)
两个贯穿案例:王国地图与建筑清单
案例一:王国地图——从地标到可计算网络
设地图上有四个地标:城堡 $C$、港口 $H$、集市 $M$、瞭望塔 $T$。直观上我们能识别“它们形成一个大致四边形”。若要进一步服务于导航与规划,就需要性质刻画与计算验证:
1. 对象识别:地标抽象为点集 $\{C,H,M,T\}$;道路抽象为边集 $\{(C,M),(M,H),(H,T),(T,C)\}$,形成图结构(网络)。 2. 性质刻画:若要声称“城堡—集市—港口近似共线”,刻画可以是“点到直线距离小于阈值”:$d(M,\overleftrightarrow{CH})<\varepsilon$。 3. 计算验证:在坐标给定时,点到直线距离可由面积关系或向量投影计算,从而把“看起来一条线”变成“误差为 3 米”之类可审计陈述。
> 练习:设 $C(0,0)$、$H(10,0)$、$M(6,0.5)$。取 $\varepsilon=1$。验证 $M$ 是否满足“近似在直线 $CH$ 上”。你可以使用点到直线距离公式,也可以用“以 $CH$ 为底的三角形面积”推导。(标签:#exercise #verification #formula)
案例二:建筑清单——从部件类别到参数一致性
建筑清单常由“部件类型 + 参数”构成:例如“圆柱柱子:半径 0.3m,高 3m;拱门:圆弧半径 2m;楼梯:踏步高度 0.15m”。其中蕴含典型的对象—属性关系:
- “圆柱”是对象类别;
- “半径、高度”是属性参数;
- “参数之间是否一致”是验证问题:例如楼梯总高度应与层高吻合,否则施工将出现不可修补的误差累积。
> 定义(参数一致性):当一个复合对象由若干部件与约束组成时,若存在一组参数赋值使所有约束同时成立,则称其参数一致。(标签:#definition #term #constraint #verification)
> 例证:层高 3m,踏步高度 0.15m,则需要踏步数 $n=3/0.15=20$,恰为整数,说明“以固定踏步高度建成该层高”的约束可满足。若层高改为 3.05m,则 $n\approx 20.33$,需