有疑问或无法实现请留言或私信可以提供解答

算法介绍

对于三轴机床来讲。加工面是否能被加工,取决于这个面是否完全可见。就是说在工件上方垂直照下一道光,光能完全照到的面既可以被加工。也意味这些加工面完全可见。这也意味着这些面没有被其他面遮挡。算法的目标就是找到那些没有被其他面遮挡的面。更进一步的讲一个面完全可见意味着它的边完全可见。它边上所有的点完全可见。我们可以把所有面上的点。抽掉观察轴的值(观察轴就是那道光射出的方向,X,Y,Z轴中的一个)。将一个三维几何体转化成二维的平面。然后逐个验证面上的点是否在其他面的内部。如果存在这样的点,则面被完全遮挡或者部分被遮挡。如果没有则面不被遮挡。

算法实现步骤

NX自动编程之五识别加工面的加工方向_算法实现

计算遮挡面所有的点是否全部在被遮挡面内部,这一步计算是一种特殊情况。对应像路灯这样的结构,最上面的路灯相对于地面是一种悬浮的状态。

点在面内部算法

算法最核心的部分是判断被遮挡面上的点是否在遮挡面的内部。对算法来讲就是判断一个点是否在一个任意多边形的内部。这个判断有很多种方法,这里介绍一种简单可靠的算法,如果一个点在多边形内部,那么从这个点发出一条射线,与多边形的交点为奇数。如果在外部则与多边形的交点为偶数。这里要注意一种特殊情况,就是交点刚好是多边形上的一个角,就像三角形,交点刚好在角上。因为一个角连着两条边。所以这个这交点与两条边相交但是算一次相交

射线: 𝑉+𝜃𝐿 这里V是点的向量,L是射线的方向向量,是除去观察轴意外的任意一个轴

线段: 𝑃1+𝛼(𝑃2−𝑃1)0≤𝛼≤1 这里P1,P2是多边形边上的点向量,方程描述的是多边形的边。

算法的目标就是计算,这两个方程的交点 : 𝑉+𝜃𝐿=𝑃1+𝛼(𝑃2−𝑃1)0≤𝛼≤1

方程很简单就在不推导了。这里要注意的是 𝛼 不在0到1之间则不相交,如果交点刚好是P1或P2则相交在角上算一次相交。

算法执行步骤就是,让这个射线跟所有的边列出方程计算他们的交点。然后统计交点的个数。如果是偶数在外部。奇数在内部。

总结

算法的实现步骤并不复杂,但是计算量很大。我们在流程图上看有两层循环,但是在计算射线与边相交的的时候还有两层循环。也就是总共有四层循环。而且我们知道一个几何体有三个轴6个方向分别是:X,Y,Z-X,-Y,-Z。所以一个几何体需要进行六次四层循环的运算,计算量就更加庞大。虽说我们可以过滤掉法向量与观察轴超过90度的面,来减少参与计算的面。但是工件上面的数量高度不确定。所以效果也很不确定。我们接下来会介绍一种新型算法,它会很大程度的降低计算量,它使用的原理跟当前算法也不同。