You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断n维平行多面体(平行六面体的高维推广)内是否包含指定点?

如何判断n维平行多面体(平行六面体的高维推广)内是否包含指定点?

嘿,这个问题其实不用纠结维度,核心思路在任意n维空间里都是通用的,咱们一步步拆解来看:

先明确前提

首先假设你的n维平行多面体(也就是你说的parallelotope)是由n个线性无关的基向量$\mathbf{b}_1, \mathbf{b}_2, ..., \mathbf{b}_n$生成的——简单说,这个多面体里的所有点都可以写成:
$$\mathbf{p} = \mathbf{v}_0 + s_1\mathbf{b}_1 + s_2\mathbf{b}_2 + ... + s_n\mathbf{b}_n$$
其中$\mathbf{v}_0$是多面体的一个顶点(比如原点,要是你的多面体不是从原点出发的,先做个平移就行),每个系数$s_i$都落在$[0,1]$区间里。

步骤1:平移点(如果需要)

如果你的平行多面体不是以原点为顶点的,先把目标点$\mathbf{t}$做平移:
$$\mathbf{t}' = \mathbf{t} - \mathbf{v}_0$$
这样就把问题转化为判断$\mathbf{t}'$是否在“以原点为顶点、由基向量生成的平行多面体”内。

步骤2:求解线性组合系数

把$\mathbf{t}'$表示成基向量的线性组合,也就是解下面的n×n线性方程组:
$$\mathbf{B}\mathbf{s} = \mathbf{t}'$$
这里$\mathbf{B}$是一个n×n矩阵,每一列就是对应的基向量$\mathbf{b}_i$,$\mathbf{s} = [s_1, s_2, ..., s_n]^T$是我们要求的系数向量。

步骤3:检查系数范围

解出$\mathbf{s}$之后,只要所有的$s_i$都满足$0 \leq s_i \leq 1$,那点$\mathbf{t}$就在这个平行多面体里;只要有一个系数超出了这个区间,就说明点不在里面。

结合你提到的3D情况对应一下

你之前在3D里用的投影方法,本质上就是在间接求解这些系数。比如解出$s_1, s_2, s_3$三个系数,只要它们都在0到1之间,点就在平行六面体里——和这个通用思路是一致的。

4D的情况完全同理

到了4维空间,操作步骤没有任何变化:

  1. 平移目标点(如果多面体顶点不是原点)
  2. 解4×4的线性方程组,得到4个系数$s_1 \sim s_4$
  3. 检查这4个系数是否全部落在$[0,1]$区间内

一些注意事项

  • 基向量必须是线性无关的,不然生成的不是n维的平行多面体(可能是低维的“扁”结构),这时候方程组要么无解,要么有无穷多解,需要先验证基的线性相关性。
  • 如果是用浮点数计算的话,记得考虑精度误差,不要严格判断等于0或1,可以给个很小的容错范围,比如判断$s_i \in [-\epsilon, 1+\epsilon]$($\epsilon$取比如$10^{-6}$之类的小值),避免把边界上的点误判为“在外面”。

备注:内容来源于stack exchange,提问作者narger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:07:38