我在这里做了(你的第一个链接是重复的)
您会发现不仅有横截面,还有带有横截面渲染的 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 条边。每个三角形在相交后将转换为:
无 - 忽略
单点 - 记住它
单边 - 记住它的 2 点
整个三角形 - 记住它的 3 点
删除重复的点,然后你应该有一个交叉点后四面体的点(0,3
或4
点)列表,所以:
0
点 - 忽略
3
点 - 渲染三角形
4
点 - 渲染四面体
1
和点也有可能,2
但你可以忽略它们,除非你想渲染无限细的线和点,在这种情况下渲染它们。有关更多信息,请在上面的链接中检查此功能:
void mesh4D::draw_cut(double w_cut)
它完全按照我在这里的描述。唯一的问题是我们失去了多边形绕组。但是,如果符号为负,法线指向内,则可以通过在normal_of_triangle
和 向量之间做点来修复。center_of_triangle - center_of_tetrahedron
因此,如果您知道如果存在错误的方向,您想要指向三角形点的反向顺序。