GetNormal与GetNormal(容差)
有人能告诉我有什么区别吗?将公差传递给正常函数应该返回什么?我问是因为我使用的是Gile的point3d.IsBetween几何扩展,我无法让它工作。具体代码是:公共静态bool Is在中间(这个Point3d pt、Point3d p1、Point3d p2、公差tol)。{。
返回p1.GetVectorTo(pt),获取正常(tol),等于(pt.GetVectorTo(p2)。获取正常(tol));。
}我传入的点离我使用起点和终点的线的中心线0.000001,无论我传入的tol值是什么,我都无法让此方法返回true。我创建了一个新的公差,其中10和10作为向量和点的值,但我仍然得到一个false作为返回值。所以......知道我做错了什么吗?。
**** Hidden Message *****
我是脑死亡的,因为它已经过了我的就寝时间,但是:
你作为一个托尔通过什么?
类似于
新的公差(1e-9, 1e-9) 新公差(10,10)
我假设整数将被转换为双精度数,但我相信这“应该”可行。 public Vector3d Get正常()。
{。
全球公差=Tolerance.Global;。
返回this.GetNormal(全局);。
}。
。
传入Tolerance.Global,看看是否有效?Tolerance.Global看起来像是有一个公共设置器,所以......公共静态容忍全球。
{。
获取。
{。
公差公差;。
false*voidPtr=((IntPtr)*(((long*)&__imp_?gTol@AcGeContext@@2VAcGeTol@@A))),ToPointer();。
memcpy((长)和公差), voidPtr,0x30);。
返回公差;。
}。
设置。
{。
memcpy(*((长*)&__imp_?gTol@AcGeContext@@2VAcGeTol@@A)),((长)&值),0x30);。
}。
}。
。
它不起作用。这就是为什么我想知道它应该如何工作。 嗨,我写的代码是错误的。试试这种方式:公共静态bool Is在中间(这个Point3d pt、Point3d p1、Point3d p2、双公差)。
{。
公差tol=新公差(公差,公差);。
返回p1.GetVectorTo(pt),Get正常(),IsEqualTo(pt.GetVectorTo(p2)。Get正常(),tol);。
}请记住,此函数正在比较两个单位向量,因此容差等于2.0或上限将始终返回true。
吉尔,你能解释一下公差值是怎么工作的吗。假设我想检查点A是否在点B和C之间,公差为.001。换句话说,如果我在点A创建了一个半径为.001的球体,我会考虑点A在点B与C之间。如果该球体与两点B和C间的线相交,那么我会考虑它在两者之间。然而,该函数的公差不遵循此模型。
在我看来,如果一个向量等于另一个向量,那么我们必须比较方向和大小。我们不应该比较单位向量而不是法线吗?
**编辑**我想现在我稍微仔细考虑一下,法线向量会得到相同的结果,因为根据定义,它们的长度都是1,与单位向量相同。
话虽如此,我不确定必须传递给函数的公差值。问鸭子没有帮助。 someVector.GetNormal()返回某个向量的单位向量。
所以,如果从p1到pt的单位向量等于从pt到p2的单位向量,这意味着pt在p1和p2之间。
在这种情况下,公差用于比较单位向量,而不考虑p1、pt和p2之间的距离,我同意这不是很相关...
页:
[1]
2