第1章 笛卡尔坐标系

从一维数轴进入二维与三维坐标,固定手性、角度和三角函数约定。

先做预测

先预测:改变坐标手性、组合顺序、时间步或退化输入时,数值和画面最先在哪里分叉。从一维数轴进入二维与三维坐标,固定手性、角度和三角函数约定。 本页用、、、和把原书直觉变成可运行证据。

原书章节定位

本页一一对应第二版“第1章 笛卡尔坐标系”。作者官网给出完整在线目录和正文;站内不重新编排原书章节,而是在同一章内补充公式推导、交互图、工程实现、失败模式与复现实验。

原书小节覆盖

  1. 1D Mathematics
  2. 2D Cartesian Space
  3. 3D Cartesian Space
  4. Left-handed versus Right-handed Spaces
  5. Summation and Product Notation
  6. Angles, Degrees, Radians and Trigonometry

五个核心抓手

  1. 笛卡尔坐标系:用原点、互相垂直的轴与单位刻度为点分配坐标。
  2. 坐标手性:右手系与左手系决定正向旋转、叉积和观察方向的符号约定。
  3. 弧度:以弧长除以半径度量角度,一整圈等于二乘pi。
  4. 三角函数:正弦与余弦把角度映射为圆周上的坐标分量。
  5. 求和记号:用Sigma压缩重复加法,并明确索引的起点、终点和项。

从空间与约定开始

任何三维公式都先写对象类型、来源空间、目标空间、单位和约定。用原点、互相垂直的轴与单位刻度为点分配坐标。 右手系与左手系决定正向旋转、叉积和观察方向的符号约定。 若只保存三个或四个浮点数而丢失语义,错误通常会延迟到渲染、碰撞或插值阶段才显现。

C=(object type,source space,target space,units,convention)\mathcal C=(\text{object type},\text{source space},\text{target space},\text{units},\text{convention})

工程接口应让非法组合尽早失败:点与方向不能随意相加,局部法线不能直接与世界光向量点积,度数不能静默传入弧度API。先画出原点和基向量,再检查结果,比只盯最终像素更可解释。

可核查推导

(x,y,z)=xex+yey+zez,θrad=θdegπ180(x,y,z)=x\mathbf e_x+y\mathbf e_y+z\mathbf e_z,\qquad \theta_{rad}=\theta_{deg}\frac{\pi}{180}

单位基向量确定三条轴;点到原点的位移在三条轴上的投影分别给出x、y、z。角度必须先统一为弧度,旋转公式中的正弦和余弦才不会混用单位。 推导时每一步标明使用了定义、正交性、单位化、线性、连续性还是近似;若条件被非均匀缩放、退化图元或有限时间步破坏,就必须切换算法或返回显式状态。

from math import pi, sin, cos
 
def point_on_circle(radius, degrees):
    theta = degrees * pi / 180
    return radius * cos(theta), radius * sin(theta)
 
assert point_on_circle(2, 0) == (2.0, 0.0)

手算、代码和交互图应在一个非对称样例上得到一致结果。单位矩阵、零角度和原点只能做冒烟测试,因为它们经常让转置、符号和顺序错误互相抵消。

几何机制与数据流

笛卡尔坐标系:用原点、互相垂直的轴与单位刻度为点分配坐标。

坐标手性:右手系与左手系决定正向旋转、叉积和观察方向的符号约定。

弧度:以弧长除以半径度量角度,一整圈等于二乘pi。

数据流必须能逐段记录:输入对象先按约定进入数学表示,经变换或求解得到中间状态,再由渲染、物理或工具消费。每个中间状态保留空间标签和残差,才能区分源数据错误、公式错误与下游显示错误。

数值误差与边界

三角函数:正弦与余弦把角度映射为圆周上的坐标分量。

求和记号:用Sigma压缩重复加法,并明确索引的起点、终点和项。

边界集至少覆盖零长度、平行、共面、极小尺度、负尺度、角度跨界、时间步变化和浮点接近阈值。相对误差与绝对误差要按量纲选用,不能让一个全局epsilon同时承担位置、角度和点积判断。

eabs=y^y,erel=eabsmax(y,smin)e_{abs}=\|\hat{\mathbf y}-\mathbf y\|,\qquad e_{rel}=\frac{e_{abs}}{\max(\|\mathbf y\|,s_{min})}
experiment={"normal":"non-symmetric input","boundary":"degenerate or near threshold","counterexample":"把度数直接传给只接受弧度的三角函数,导致小角度运动也剧烈抖动。","replay":"fixed inputs and conventions"}
assert set(experiment)=={"normal","boundary","counterexample","replay"}

工程案例

导入模型时先记录源工具的向上轴、前向轴与手性,再通过一个已知朝向的测试三角形验收转换;只看模型是否出现在画面里,会漏掉法线和旋转方向反转。 报告同时保存输入、空间约定、参数、关键中间值、残差与调试图层。若重放后结论改变,先比较约定和数据版本,再比较算法实现。

evidence=[("笛卡尔坐标系","definition"),("弧度","derivation"),("求和记号","replay")]
assert len({name for name,_ in evidence})==3
  1. 选一个非对称、可手算的正常样例,记录所有空间、单位和正方向。
  2. 一次只改变一个参数,比较公式、代码与交互图的中间状态。
  3. 加入退化或近阈值输入,确认返回状态与容差策略一致。
  4. 固定输入与时间步重放,保存残差、失败原因和未覆盖范围。

验收证书

accept=conventions fixedinvariants holderror within budgetreplay succeeds\operatorname{accept}=\text{conventions fixed}\land\text{invariants hold}\land\text{error within budget}\land\text{replay succeeds}

验收证书拒绝“看起来差不多”。它必须回答用了哪套手性和向量约定、哪个不变量被检查、误差预算是多少、退化输入如何返回,以及另一台机器怎样从输入重建结果。

常见误区

本章回顾

本章覆盖笛卡尔坐标系、坐标手性、弧度、三角函数、求和记号。真正掌握的标准是:能从定义推到公式,能把公式落到代码,能通过可交互图解释参数变化,并能在反例下给出稳定且可复现的失败结果。

术语表

讨论

评论区加载中…