繁体   English   中英

将点连接到平面/绘制多边形

[英]Connect points to plane/Draw Polygon

我目前正在一个项目中,我想在3D立方体上绘制不同的数学对象。 对于作为矢量方程式给出的点和线,它可以正常工作。 现在,我有一个平面作为参数方程式给出。 该平面可以在3D空间中的某个位置,并且可以在屏幕上看到,也就是3D立方体。 立方体充当AABB。

我需要知道的第一件事是平面是否与立方体相交。 为此,我制作了与该立方体的边缘相同的线,然后进行12条线/平面相交,计算该线是否在AABB的线段(边缘)内被击中。 这样做,我将获得一组点,这些点定义了我必须绘制的立方体中平面的可见部分。

现在,我最多有6个点A,B,C,D,E和F定义了我要绘制的多边形ABCDEF。 为此,我想将多边形拆分为三角形,例如:ABC,ACD,ADE,AED。 我会像这里描述的那样绘制三角形。 我当前面临的问题是,我(相信我)需要对点进行排序以获取正确的三角形,然后获得正确绘制的多边形。 我发现了凸包,并发现了可在三维空间中工作的QuickHull 此算法只有一个问题:首先,我需要创建一个三维单纯形,以找到该算法的起点。 但是,由于我所有的点都在同一平面上,因此它们仅构成一个二维平面。 因此,我认为该算法将无法正常工作。

现在的问题是:如何对这些3D点进行排序,以使多边形成为这些点的2D凸包? 如果这是一个限制:我需要在C中执行此操作。

谢谢你的帮助!

一种方法是在平面空间(即2D)而不是全局3D空间中表达相交点的坐标。 根据您计算这些点的精确程度,您可能已经具有这些(例如(U,V))坐标。 如果不是,则计算属于该平面的两个正交向量,并获取具有(X,Y,Z)相交的点积。 然后,您可以在2D中找到凸包。

立方体的8个角可以在平面的任一侧,并且在将坐标插入平面的隐式方程式(实际上是顶点的W坐标)中时,带有+或-号。 这最多形成2 ^ 8 = 256个配置(并非所有配置都是可能的)。

为了提高效率,您可以一次解决所有这些配置,并在每种情况下以正确的顺序列出形成多边形的相交点。 然后,对于给定的情况,计算8个符号位,将它们打包为一个字节,然后查找多边形表。


更新 :直接构建面部。

或者,您可以通过跟踪边缘之间的交点来继续。

从已知横越平面的立方体的边缘开始。 该边属于两个面。 任意选择一个。 然后,飞机以三角形和五边形或两个四边形切此面。 转到另一个与脸部边缘相交的地方。 以该新边缘为边界的另一张脸。 这张脸被切成三角形和五边形...

继续此过程,将遍历定义面多边形的一组面和相应线段。

在此处输入图片说明

在图中,您从边缘HD上的交点开始,该交点属于面DCGH。 然后移至边缘CG,也位于面CGFB中。 从那里,移到边缘FG,也要面对EFGH。 移到边缘EH上,也位于ADHE面上。 您又回到了高清边缘。

完整的讨论必须考虑通过立方体一个或多个顶点的平面的情况。 (但是您可以通过稍微平移平面,构造相交多边形并删除可能已经以此方式人工创建的微小边缘来作弊。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM