Math 与立方体的Sympy Line3D相交

Math 与立方体的Sympy Line3D相交,math,3d,geometry,sympy,computational-geometry,Math,3d,Geometry,Sympy,Computational Geometry,我正在开发一个程序,用户可以创建任何提供两点的直线,我需要一个算法来获得创建的直线与200x200维立方体之间的交点 我在考虑评估每个轴上100个单位的正值和负值的线值,然后进行比较。如果结果大于100个单位,则线已穿过立方体面。然后这些线可能会穿过立方体的边或顶点,因此应该有一个更大或相等的操作符 我的问题是,我找不到如何正确创建直线方程,Symphy库在3D几何体方面有局限性。代码: 从sympy进口* x、 y,z=符号x y z 直线=直线3DPOINT3D1,1,1,点3D3,2,2。

我正在开发一个程序,用户可以创建任何提供两点的直线,我需要一个算法来获得创建的直线与200x200维立方体之间的交点

我在考虑评估每个轴上100个单位的正值和负值的线值,然后进行比较。如果结果大于100个单位,则线已穿过立方体面。然后这些线可能会穿过立方体的边或顶点,因此应该有一个更大或相等的操作符

我的问题是,我找不到如何正确创建直线方程,Symphy库在3D几何体方面有局限性。代码:

从sympy进口* x、 y,z=符号x y z 直线=直线3DPOINT3D1,1,1,点3D3,2,2。等式x,y,z 印刷线 打印行[0]-行[1] 输出:

-x+2*y-1,-x+2*z-1


2*y-2*z

直线具有向量方程

P(t) = Q + t.QR
其中Q,R是定义它的两点

据推测,立方体是轴对齐的,定义为范围[X0,X1]x[Y0,Y1]x[Z0,Z1]

与平面X=X0的交点通过以下方式获得:

X0 = Qx + t (Rx - Qx),
i、 e

重复六个平面,你将得到三个t*的间隔,你必须取它们的交点,由

[max(tx0, ty0, tz0), min(tx1, ty1, tz1)].
*如有必要,交换数值,使t0 如果tmax>tmin,则范围为空且没有交叉点。否则,在第一个方程中插入t的值以获得坐标

如果立方体未对齐,请旋转空间使其对齐,找到交点,然后反向旋转


如果直线仅限于一个线段,也可以取t范围与[0,1]的交点。

我最终获得了一个效率不高但简单的解决方案。我已经创建了8个平面,每个立方体面一个,并与所有平面相交。如果点的坐标在范围内,直线穿过该面,使该点成为一个顶点。

200x200维的立方体是什么意思?您是指代码示例中的三维立方体,其中每边的长度为200,而不是代码示例中的长度?多维数据集在代码中的什么位置?为什么您希望从代码中得到一个等式?三维空间中的直线由两个线性方程定义,而不是一个。你写的是创建的线和立方体之间的交点,但这种交点通常涉及立方体内部的无限多个点和边界上的两个点。总的来说,您的问题不清楚,请澄清。多维数据集在我的代码中不存在,它是一个用于渲染行尾的概念。我认为每行有一个等式,比如ax+by+cz=d。我只需要绘制线的边界点。像ax+by+cz=d这样的方程定义了三维空间中的平面,而不是线。对于一条直线,您需要两个这样的方程式,尽管还有其他定义直线的方法,例如直线上的两点。因此,为了澄清,您是否希望由两点和尺寸为200的立方体定义的直线交点的两个边界点位于原点中心并与轴对齐?如果只有一个边界点或根本没有交点,该怎么办?最后,真的需要sympy吗?就是这样,直线由立方体内的两个点定义。意思是?@PepeElMago33你知道向量和参数方程吗?只是基础,我只研究过二维方程
[max(tx0, ty0, tz0), min(tx1, ty1, tz1)].