1

到目前为止,我已经阅读了以下关于计算 4D 对象的 3D 相交点的内容:

4D横截面的简单实现

如何获得 4D 网格的 3D 横截面?

但是,我真的对发生的事情感到困惑。我知道我需要计算 4D 对象的每个边缘(在我的情况下是 tesseract)与 3D 空间相交的点,然后加入计算的点,但是我不确定如何计算相交完毕。

如果有人能解释他们将如何计算完整的 3D 横截面会很好,但是我会对如何计算 1 个 4D 边缘的交点感到满意,例如两个 4D 点之间的交点。

(与我发现的第一个链接中显示的不同,我希望能够在第 4 轴上的任何 w 坐标处执行此操作,因此一种计算方法可以记住沿 w 轴的 3D 空间位置,沿与 tesseract 本身的位置和方向)

谢谢

4

1 回答 1

2

我在这里做了(你的第一个链接是重复的)

您会发现不仅有横截面,还有带有横截面渲染的 C++ 4D tesseract 示例(也没有)。

现在您要问的是如何计算几何边缘和轴对齐的 4D 超平面之间的交集w = constant?这很容易,因为边缘实际上是由两个点定义的,p0,p1因此您可以为此使用线性插值:

p(t) = p0 + (p1-p0)*t

这将为您提供线上的任何点,而t = <0,1>标量线性参数定义了线上p(t)的位置。

p(0) = p0
p(1) = p1
p(0.5) = mid point between p0,p1

现在您只想解决t,因此w等于您的常数,将其w_cut称为切割平面。

p(t).w = w_cut
p0.w + (p1.w-p0.w)*t = w_cut
t = (w_cut-p0.w) / (p1.w-p0.w)

如果t<0,1>区间内,则边缘与您的平面相交。如果(p1.w-p0.w)=0整个边缘都在平面内。

现在,如链接答案中所述,这不涉及拓扑,因此您将获得点和边,但不会获得有关如何从它们构造 3D 几何图形的互连信息,并且需要进行彻底的分析。更好的是以四面体的形式组织您的网格并检查其三角形的交点而不是单独的边缘。

因此,您检查四面体的每个三角形的 3 条边。每个三角形在相交后将转换为:

  1. 无 - 忽略

  2. 单点 - 记住它

  3. 单边 - 记住它的 2 点

  4. 整个三角形 - 记住它的 3 点

删除重复的点,然后你应该有一个交叉点后四面体的点(0,34点)列表,所以:

  1. 0点 - 忽略

  2. 3点 - 渲染三角形

  3. 4点 - 渲染四面体

1和点也有可能,2但你可以忽略它们,除非你想渲染无限细的线和点,在这种情况下渲染它们。有关更多信息,请在上面的链接中检查此功能:

void mesh4D::draw_cut(double w_cut)

它完全按照我在这里的描述。唯一的问题是我们失去了多边形绕组。但是,如果符号为负,法线指向内,则可以通过在normal_of_triangle和 向量之间做点来修复。center_of_triangle - center_of_tetrahedron因此,如果您知道如果存在错误的方向,您想要指向三角形点的反向顺序。

于 2018-04-25T07:11:46.013 回答