首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算四维形状的三维截面

计算四维形状的三维截面
EN

Stack Overflow用户
提问于 2018-04-24 18:31:20
回答 1查看 979关注 0票数 1

到目前为止,我已经阅读了关于计算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轴的位置,以及本身的位置和方向)

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-25 07:11:46

我在这里做过(你的第一个链接是它的副本)

您将发现不仅仅是横截面,还有带有横截面呈现的C++ 4D tesseract示例(没有)。

现在你要问的是,如何计算几何学的边缘与同轴的4D超平面w = constant之间的交集?这很容易,因为边是由两点p0,p1定义的直线,因此可以使用线性插值:

代码语言:javascript
复制
p(t) = p0 + (p1-p0)*t

这将给出直线中的任意点,而t = <0,1>是标量线性参数,定义行上p(t)的位置。

代码语言:javascript
复制
p(0) = p0
p(1) = p1
p(0.5) = mid point between p0,p1

现在你只想解t,所以w等于你的常数,让它叫做w_cut,作为切割平面。

代码语言:javascript
复制
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条边。每个三角形在相交后转换为:

  1. 没什么-忽略
  2. 单点-记住
  3. 单边-记住它的两点
  4. 全三角形-记住它的3点

删除重复点,在此之后,您应该有一个四面体交集后的点的列表(0,34点),因此:

  1. 0点-忽略
  2. 3点-渲染三角形
  3. 4点-渲染四面体

12点也有可能存在,但您可以忽略它们,除非您还想呈现无限细的线条和点,在这种情况下,可以呈现它们。有关更多信息,请在上面的链接中查看此函数:

代码语言:javascript
复制
void mesh4D::draw_cut(double w_cut)

就像我在这里描述的那样。唯一的问题是我们失去了多边形缠绕。但是这可以通过在normal_of_triangle和向量center_of_triangle - center_of_tetrahedron之间做点来修复,如果符号是负的,法线是向内指向的。所以,如果你知道你想用哪种方式来指向三角形点的反序,如果出现了错误的方向。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50008610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档