求曲线上点(40币求助)
本帖最后由 redcat 于 2012-5-3 23:13 编辑94671228已知曲线上点B的x值,求该曲线上点B的y值
缘何有条件限制?
那藉助 Extend / Trim 可以吗? 本帖最后由 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:27 编辑
Gu_xl 发表于 2012-4-12 16:03 http://bbs.mjtd.com/static/image/common/back.gif
可采用二分法逼近:
对闭合和满足条件的点个数大于1的曲线无效 redcat 发表于 2012-4-13 09:13 static/image/common/back.gif
对闭合和满足条件的点个数大于1的曲线无效
用vla-IntersectWith基本上没啥难度,主要是想学习学习算法运用 本帖最后由 redcat 于 2012-5-3 17:06 编辑
redcat 发表于 2012-4-13 10:34 http://bbs.mjtd.com/static/image/common/back.gif
用vla-IntersectWith基本上没啥难度,主要是想学习学习算法运用
红色线是求满足x条件的点 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) ,若满足,在该区间用逼近法进一步找到交点! 栏选可轻易实现,(ssget "f" ....)然后ssnamex command ray
command id
…… (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