gpt4 book ai didi

algorithm - 计算 4D 形状的 3D 横截面(tesseract)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:10:30 24 4
gpt4 key购买 nike

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

Simple implementation of 4D cross-section

How do I get a 3D cross section of a 4D mesh?

但是,我对发生的事情真的很困惑。我知道我需要计算 4D 对象的每个边缘(在我的例子中是 tesseract)与 3D 空间相交的点,然后连接计算出的点,但是我不确定相交的计算方式完成。

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

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

谢谢

最佳答案

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

你会发现不仅仅是横截面,还有带有横截面渲染的 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 points - 渲染三角形

  3. 4 points - 渲染四面体

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

void mesh4D::draw_cut(double w_cut)

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

关于algorithm - 计算 4D 形状的 3D 横截面(tesseract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com