redcat 发表于 2012-4-12 12:05:46

求曲线上点(40币求助)

本帖最后由 redcat 于 2012-5-3 23:13 编辑

94671228已知曲线上点B的x值,求该曲线上点B的y值

Andyhon 发表于 2012-4-12 12:44:37

缘何有条件限制?
那藉助 Extend / Trim 可以吗?

Gu_xl 发表于 2012-4-12 16:03:59

本帖最后由 Gu_xl 于 2012-4-12 16:06 编辑

可采用二分法逼近:

(defun c:tt()
(setq e (car(entsel "\n选择曲线:")))
(setq x (car (getpoint "\nX位置点:")))
(setq pt (eff 0 (vlax-curve-getEndParam e) x e 1e-6))
(if pt (princ pt))
(princ)
)
(defun eff (pa pb X Curve Fuzz)
(setq pc (* 0.5 (+ pa pb)))
(setq fa (vlax-curve-getPointAtParam curve pa)
      fb (vlax-curve-getPointAtParam curve pb)
      fc (vlax-curve-getPointAtParam curve pc)
         )
(cond ((equal fa fb fuzz) fc)
      ((<= (car fa) x (car fc))
         (eff pa pc x curve fuzz)
         )
      ((<= (car fc) x (car fb))
         (eff pc pb x curve fuzz)
         )
      (t nil)
      )
)

redcat 发表于 2012-4-13 09:13:53

本帖最后由 redcat 于 2012-4-13 09:27 编辑

Gu_xl 发表于 2012-4-12 16:03 http://bbs.mjtd.com/static/image/common/back.gif
可采用二分法逼近:

对闭合和满足条件的点个数大于1的曲线无效

redcat 发表于 2012-4-13 10:34:14

redcat 发表于 2012-4-13 09:13 static/image/common/back.gif
对闭合和满足条件的点个数大于1的曲线无效

用vla-IntersectWith基本上没啥难度,主要是想学习学习算法运用

redcat 发表于 2012-5-3 17:05:22

本帖最后由 redcat 于 2012-5-3 17:06 编辑

redcat 发表于 2012-4-13 10:34 http://bbs.mjtd.com/static/image/common/back.gif
用vla-IntersectWith基本上没啥难度,主要是想学习学习算法运用

红色线是求满足x条件的点

Gu_xl 发表于 2012-5-5 11:51:24

redcat 发表于 2012-5-3 17:05 static/image/common/back.gif
红色线是求满足x条件的点

再给你个思路:
1、先取得曲线的包围框,得到最小Y值y0和最大Y值y1,
2、从y0到y1按给定步长d 和X值组点,分别得到点p1 p2 ...
3、分别判断 是否满足 (equal p1 (vlax-curve-getclosedpointto curve p1) d) ,若满足,在该区间用逼近法进一步找到交点!

caoyin 发表于 2012-5-5 13:29:52

栏选可轻易实现,(ssget "f" ....)然后ssnamex

xyp1964 发表于 2012-5-5 14:41:26

command ray
command id
……

894560869 发表于 2019-4-14 09:47:21

(setq e (car(entsel "\n选择曲线:")))
(setq x (car (getpoint "\nX位置点:")))
请教 选择曲线时 ,即时获得位置点
也就是不用再拾取曲线时,不用再设置点位
本人的代码如下:
(if (And entcc (=(Cdr(Assoc 0 (Entget entcc)))"CIRCLE"))
(progn (Command"Trim"entcc"""C"(List Ss Ptcdd)"")))
页: [1] 2
查看完整版本: 求曲线上点(40币求助)