《数学 的 最后一个 杰作 : 傅里叶级数》 https://tieba.baidu.com/p/7647533106 。
9 楼
回复 4 楼 @dons222 ,
你一说, 我想起来了, 要 计算 旋转 *移 的 是 模型 上 很多的 点 , 不是 一两个 点, 所以 大批量封送 到 GPU 计算 。 如此, 如果 是 有 加法 也有 乘法, 也许 加法 要 封送一次,乘法 要 封送一次, 加法 和 乘法 之间 交换数据 会 产生 一些 中间环节 。
我想 偏心旋转 仍然 是 2 次 旋转组成, 以 无限远 的 地方 为 原点 旋转一次, 以此 *移, 以 实际要旋转的 “支点” 为 原点 旋转一次, 以此 旋转 。
对于 以 无穷远 的 地方 为 原点 旋转坐标系 的 问题, 我 首先 想到的 是 精度, 即 计算机 的 运算精度, 比如 浮点数 的 精度 , 即 有效数字位数 。
一直以来, 我一直 有一个 担心, 也 没 完全 搞清楚, 一些 缩放法, 是否 最终 都是 在 拼 精度 ? 如果 计算机 的 精度 不够, 比如 浮点数 的 有效数字 不够, 则 缩放 也许 是 “缩前放后一个样” , “竹篮打水一场空”, 收不到 实际 的 效益 ?
32 位 浮点数 的 有效数字 范围 大概 是 - 20 亿 ~ 20 亿 , 64 位 是 - 400 亿亿 ~ 400 亿亿 , 如果 把 “无穷远” 设为 400 亿亿, 那么, 旋转 产生 的 *似*移 的 距离 可以 精确到 1, 或者说 个位数, 两者 比值 是 400 亿亿 : 1 , 好像 很 可观 。
但 到底 和 精度 有没有 关系 呢 ? 我还是 没 搞清楚 。
第二, 理论上, 以 二维坐标系 为例, 设 物体 A 的 坐标 是 ( Xa, Ya ) , Xa > 0 , Ya > 0 , 物体 A 可以看作一个点 。 A 在 y 方向 上 离 原点 很远,即 Ya 很大 , 在 x 方向 上 离 原点 很*, 即 Xa 很小, 坐标系 围绕 原点 旋转一个 很小 的 角度 θ, 旋转后 A 的 坐标 是 ( Xa ′, Ya ′ ) , ⊿ x = Xa ′ - Xa , ⊿ y = Ya ′ - Ya , 要 满足 ⊿ x 远大于 ⊿ y, 才能 用 旋转 来 *似 *移 。
数学上, 可以表述为, Ya -> 无穷, θ 是 无穷小, 和 Ya 同阶, 试证明, ⊿ x 是 有 确定大小 的 值, ⊿ y 是 无穷小 。
也可以 等价 的 表述 为, Ya 是 有确定大小 的 值, θ -> 0 , 试证明, ⊿ x 是 无穷小, ⊿ y 是 高阶无穷小 。
二维坐标系 旋转 公式 主要 是 和角公式, 三维坐标系 旋转 可以由 三次 二维坐标系 旋转 合成 。
可以看到一个问题, 无论 二维 还是 三维, 都 需要 在 一个 坐标轴 方向 上 物体 离 原点 很远, 才能 用 旋转 *似 另一个(其它) 坐标轴 上 的 坐标*移 。
物体 离 原点 很远 的 这个 方向 的 坐标轴 的 坐标 *移 不能 通过 旋转 *似 。
比如, x - y - z 坐标系, 让 物体 在 z 轴 方向上 离 原点 很远, 则 可以用 旋转 来 *似 物体 在 x 轴方向 、y 轴方向 上 的 *移, 但 不能用 旋转 来 *似 物体 在 z 轴方向 上 的 *移 。
也就是, 我们 正对 物体, 物体 离 我们 很远, 可以让 我们 或 物体 旋转 来 *似 物体 相对于 我们 的 左右移动 上下移动, 但是 不能 用 旋转 来 *似 物体 朝 我们 靠* 或 远离 的 移动 。
这里 涉及 的 证明 大家 都会, 但 我还是 写一下, 后面连载 。 (不一定 天天连载, 可能 隔几天 连载一次)
10 楼
接 9 楼 。 @dons222
用 一次 旋转 来 实现 *移 + 旋转 是可以的,只要 选择 合适 的 支点 就行 。
未完待续 。
11 楼
接 10 楼 。
9 楼 的 要 证明 的 数学题目, 简单的, 可以这样来证 :
⊿ x = BH, ⊿ y = AH, 证明 θ -> 0 时, BH 是 无穷小, AH 是 高阶无穷小 。
实际上 就是 证明 θ -> 0 时, sin θ 是 无穷小, 1 - cos θ 是 高阶无穷小 , 或者说, 求 ( 1 - cos θ ) / sin θ , θ -> 0 的 极限, 哈哈 。
当 θ -> 0 时, 1 - cos θ -> 0 , sin θ -> 0 , 用 洛必达法则
( 1 - cos θ ) / sin θ , θ -> 0
= ( 1 - cos θ ) ′ / ( sin θ ) ′
= sin θ / cos θ
= sin 0 / cos 0
= 0 / 1
= 0
即 ( 1 - cos θ ) / sin θ , θ -> 0 的 极限 是 0, ( 1 - cos θ ) / sin θ , θ -> 0 是 无穷小, 所以 1 - cos θ 是 sin θ 的 高阶无穷小 。
那 1 - cos θ 比 sin θ 高了 几阶 呢 ? 可以这样看 :
( 1 - cos θ ) / θ ² , θ -> 0
过程略
= 1/2
所以 θ -> 0 时, 1 - cos θ 和 θ ² 是 同阶无穷小, 而 θ ² 比 θ 高了一阶, 所以 1 - cos θ 比 θ 高了一阶, 又 θ 和 sin θ 是 等价无穷小, 所以 1 - cos θ 比 sin θ 高了一阶 。
严格一点, A 点 不一定 在 y 轴 上, 这要用 和角公式 证, 后面连载 。
刚在 10 楼 的 回复 中 和 dons222 讨论, 现在 的 需求 看起来是, 在 三维 下 要 求出 一次 旋转 等价于 *移 + 旋转 的 支点 和 围绕 3 个 坐标轴 旋转 的 角度 。
在 模型 上 找一点 A, 坐标为 ( Xa, Ya, Za ) , 计算 A 点 *移 + 旋转 后 的 的 坐标 ( Xa ′, Ya ′, Za ′ ) ,
设 坐标系旋转公式 为
x ′ = f ( X支, Y支, Z支, θx, θy, θz, x )
y ′ = f ( X支, Y支, Z支, θx, θy, θz, y )
z ′ = f ( X支, Y支, Z支, θx, θy, θz, z )
x, y, z 为 某点 旋转前 的 坐标, x ′, y ′, z ′ 为 旋转后 的 坐标, X支, Y支, Z支 为 支点坐标 , θx, θy, θz 为 围绕 x, y, z 坐标轴 旋转 的 角度 。
这样, 可以 列 一个 方程组 :
Xa ′ = f ( X支, Y支, Z支, θx, θy, θz, Xa )
Ya ′ = f ( X支, Y支, Z支, θx, θy, θz, Ya )
Za ′ = f ( X支, Y支, Z支, θx, θy, θz, Za )
Xa, Ya, Za , Xa ′, Ya ′, Za ′ 是 已知数, X支, Y支, Z支, θx, θy, θz 是 未知数 。
有 6 个 未知数, 因此 还要 再找一点 B ( Xb, Yb, Zb ) , 同样 计算出 *移 + 旋转 后 的 坐标 ( Xb ′, Yb ′, Zb ′ ) , 再列 3 个 方程, 这样 就 是 6 个 方程, 组成了 6 元方程组,
解这个 方程组, 可以 求得 支点 ( X支, Y支, Z支 ) 和 旋转角度 θx, θy, θz 。
以 ( X支, Y支, Z支 ) 为 支点 旋转 θx, θy, θz , 这样一次 旋转 的 效果 等价于 *移 + 旋转 。
14 楼
dons222 思维机器, 看了 11 楼 13 楼 的 回复, 对 你们 的 架构 就 比较清楚了 。 大概 是 这样, 有一个 全局坐标系 O, 在 O 里 有一个 固定 位置 和 角度 的 镜头, 要 从 不同 位置 和 姿态(角度) 观察 物体 时, 可以先在 O 系 里 *移物体, 再 选取一个 新的 坐标系 O ′ , 以 O ′ 为 支点 旋转 物体, 然后 再由 O 系 里 的 镜头 观察 , 观察 指 透视成像 。
O 系 的 *移 和 O ′ 系 的 旋转 可以让 物体 相对于 镜头 处于 任何 位置 和 姿态(角度) 。
现在 dons222 的 需求 是 把 O 系 的 *移 省掉, 用 O ′ 的 一次旋转 就 可以起到 O 系 *移 和 O ′ 系 旋转 的 效果 。
其实 可以有 2 种 架构,
1 移动镜头, *移 和 旋转 镜头 使之 在 需要 的 位置 和 角度 对着 物体, 这个 方法 的 优点 是 不需要 物体 的 大量点 计算 *移, 也 不需要 物体 的 大量点 的 O 系 和 O ′ 系 之间 的 坐标变换 。 只需要 计算 镜头 的 *移 和 旋转, 这只 需要 计算 几个点 。 镜头 对好 物体 后, 直接 透视成像 就可以 , 透视成像 使用 O 系 坐标 。
2 固定镜头, 对 物体 *移 和 选取 O ′ 让 物体 旋转 使 物体 移动 到 指定 的 位置 和 旋转 到 指定 姿态(角度), 然后 由 固定镜头 透视成像 。 这个 方法 需要 做 物体 的 大量点 在 O 系 里 的 *移计算, 然后 还要 把 物体 的 大量点 的 O 系 坐标 转换成 O ′ 系 的, 然后 在 O ′ 里 旋转 物体, 这需要 计算 物体 大量点 的 旋转, 再 把 旋转后 的 物体 大量点 的 O ′ 系 坐标 转换回 O 系 坐标, 然后 由 O 系 的 固定镜头 透视成像 。
方法 1 只能 用于 整个场景(所有 物体) 的 位置 和 角度 一起改变 的 场合, 方法 2 可以用于 分别 对 一些 物体 移动 和 旋转 不同的 位置 和 姿态(角度) , 再 一起 观察(透视成像) 的 场合 。
接下来 分析 二维 和 三维 上 能不能 通过 一次旋转 实现(等价) *移 + 旋转 。
先看 二维, 目前 的 结论 是 可以 , 但 具体 的 证明 没有写, 可以来看 一个 例子 :
AB 先 *移, 再旋转, 到 A ′ B ′ 的 位置 。 A ′ 在 AB 的 延长线 上, AB 和 A ′ B ′ 垂直 。 能不能 找到 一个 支点 O2 , 让 AB 围绕 O2 旋转, 一次 旋转 就可以 让 AB 旋转到 A ′ B ′ , 和 A ′ B ′ 重合 ?
乍一看, 好像 不行, 找不到 合适 的 支点 O2, 但 实际上 是 可以的 。
再来 看 三维, 目前 的 结论 是 不行, 可以这样 证明 :
一次 三维旋转 由 3 次 二维旋转 组成, 在 三维空间 里 取 一段 线段 AB, 再在 另一个 地方 取 同样 长度 的 一段 线段 A ′ B ′ , 假设 一次 三维旋转 可以 让 AB 旋转 到 A ′ B ′ 处 并 和 A ′ B ′ 重合, A 和 A ′ 重合, B 和 B ′ 重合, 这 需要 3 次 二维旋转, 也可能 只要 2 次 或 1 次, 不管怎样, 最后一次, 必然 是 一个 二维*面 上 让 AB 和 A ′ B ′ 旋转重合 。
比如, 最后一次旋转 是 围绕 z 轴 旋转, 在 x - y *面 或 *行于 x - y *面 的 *面 上 旋转, 这个 *面 记为 P, z 轴 和 P 的 交点 记为 Op, 根据 上文 讨论 的 二维 上 一次旋转 实现(等价) *移 + 旋转 的 原理, P 上 的 AB 和 A ′ B ′ 要 旋转重合, 要 选择一个 正确的 支点 O2, 而 这个 O2 很可能 并不和 Op 重合, 如此, 围绕 O2 的 旋转 就不是 围绕 z 轴 的 旋转, 也就是 围绕 O2 旋转 使 AB 和 A ′ B ′ 重合, 但 围绕 O2 旋转 不是 围绕 z 轴 旋转 。
所以 一次 三维旋转 不能 实现 (等价) *移 + 旋转 。
还需要 补充 一点, 三维旋转 的 3 次 二维旋转 可以 有 6 种 旋转顺序, 比如 先围绕 x 轴 旋转, 再围绕 y 轴旋转, 再围绕 z 轴旋转, 记为 x -> y -> z, 还有 x -> z -> y , y -> x -> z , y -> z -> x , z -> x -> y , z -> y -> x 。 不同 的 顺序 旋转的 结果 (AB 的 位置 和 姿态 ( 角度 ) ) 是 不一样 的 。
但 总可以举出例子 (AB 和 A ′ B ′ ), 使得 无论 以 何种 顺序 旋转, 最后 一次 二维旋转 都会 出现 上述 的 O2 不和 Op 重合 的 情况 。
以上 证明 一次 三维旋转 不能 实现 (等价) *移 + 旋转 。
这次 写 的 时间长 是 想的多, 一些 中间过程 也 推翻重来, 没有 写出来 。
16 楼
之前 认为 三维 里 *移 + 旋转 不能 用 一次旋转 来 实现(等价) 的 结论 是 错误的, 我刚 想到了一个 方法 , 用 2 个 二维旋转 就可以 实现 线段 AB 任意 的 位置姿态 变成 另一个 位置姿态 。 这个 方法 的 解 至少 有 2个, 可能 还有 若干个 。 这个 方法 跟 你说的 固定一个点 比如 B 在 一个 轴 上, 围绕 轴 旋转 的 方法 差不多 。
除了 上述方法, 因为 O ′ 可以是 任意的, 任意 的 O ′ 可能 还会产生 无数个 解 。
17 楼
三维旋转 的 讨论内容 后续 请看 《三维坐标系由一次转动代替“*动+转动”是否能得到数学证明?》 https://tieba.baidu.com/p/7656957355 。
20 楼
fjg5610 :
模糊集不是数学问题?开创了人脑辩证思维的形式化方法。
K歌之王 :模糊集 是 模糊数学 吗 ? 30 年前 就说 神经网络 和 模糊数学 是 人工智能 的 两个方向, 如今是 被 神经网络(卷积) 一统天下 了 ? 不过 未来 白盒人工智能 里 模糊数学 应该 会 起作用 的 。
K歌之王 :模糊数学 也只是 发明了一些 形式 吧 ? 发明了 一种 数学语言 。 我想 用 计算机语言 的 if else 也能 表达 吧 ? 说白一点, 用 人类语言 大白话 也能表达(更能表达) 。