到目前为止,我已经阅读了关于计算4D对象的三维相交点的如下内容:
Simple implementation of 4D cross-section
How do I get a 3D cross section of a 4D mesh?
然而,我真的很困惑到底发生了什么。我知道我需要计算4D对象(在我的例子中是tesseract)的每一个边缘与3D空间相交的点,然后加入所计算的点,但是我不确定如何计算相交点。
如果有人能解释他们如何计算整个三维横截面,那就太好了,但是我会满足于如何计算1,4D边的相交,就像两个4D点的交点一样。
(与我发现的第一个链接中所显示的不同,我希望能够在第4轴上的任意w坐标上这样做,这样就可以计算出三维空间沿w轴的位置,以及本身的位置和方向)
谢谢
发布于 2018-04-25 07:11:46
我在这里做过(你的第一个链接是它的副本)
您将发现不仅仅是横截面,还有带有横截面呈现的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整条边在平面上。
现在,正如链接答案中提到的,这不涉及拓扑,所以您将获得点和边,而不是关于如何从它们构造三维几何的相互关联的信息,并且需要进行彻底的分析。更好的方法是把你的网格组织成四面体,检查它的三角形的交点,而不仅仅是边。
所以你要检查四面体每个三角形的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之间做点来修复,如果符号是负的,法线是向内指向的。所以,如果你知道你想用哪种方式来指向三角形点的反序,如果出现了错误的方向。
https://stackoverflow.com/questions/50008610
复制相似问题