lpseifert 发表于 2022-7-6 11:27:58

曲线/直线测试

我试图使用以下代码测试多段线的一段是曲线还是直线。有人能解释一下为什么在直线段上有时返回零吗?评估时,差异很小(例如2.84217e-014),但不会评估为零。

(zerop (- (abs (distance (vlax-curve-getPointAtParam obj (1- idx))(vlax-curve-getPointAtParam obj idx)))
         (abs (- (vlax-curve-getDistAtParam obj (1- idx))(vlax-curve-getDistAtParam obj idx)))
         )
      )

jammie 发表于 2022-7-6 11:44:27

尽管有人可能会说不同的话,但我会在这个练习中使用vlax曲线GetSeconderiv
 
返回值0表示直线段,其他任何值都表示曲线
 
 
(angle
(vlax-curve-getSecondDeriv obj idx)
(list 0 0 0))
 
我已经有一段时间没有用微积分了。。有关更多信息,请参阅
 
http://en.wikipedia.org/wiki/Second_derivative

Lee Mac 发表于 2022-7-6 11:46:55

不错,Jammie

SEANT 发表于 2022-7-6 11:56:10

关于一般浮点计算,2.84217e-014低于公差水平,因此应视为零。请参阅此处第7篇文章的链接:
 
http://www.cadtutor.net/forum/showthread.php?t=43500
 
使用vlax curve GetSeconderiv听起来确实是明智的做法,但如果返回值不是显式的0,则可能也需要将该结果与容差进行比较。

Lee Mac 发表于 2022-7-6 12:10:37

可能使用:
 

(equal
(angle '(0 0 0)
   (vlax-curve-getSecondDeriv obj idx)) 0.0 1e-

jammie 发表于 2022-7-6 12:13:15

 
谢谢李

SEANT 发表于 2022-7-6 12:24:20

 
看起来不错。

lpseifert 发表于 2022-7-6 12:29:28

谢谢大家。。。
我想我可以用(等于模糊因子)代替(zerop)来比较我的示例中的两个方程。
但我会试试第二种。
页: [1]
查看完整版本: 曲线/直线测试