Y沿弧U相交
大家好我试图识别圆弧上的点,如果从圆弧上的测试点绘制一条水平线,结果将是Y坐标相交的一个或两个点的列表_
干杯 调查
(vlax-invoke obj1 'IntersectWith obj2 acExtendNone) 谢谢alanjt。
不幸的是,我不能使用intersectsWith方法,因为没有实际的线,并且基于ODBX的程序执行计算,每个文档将插入数千次。我写了一个方法来生成关于弧的每个可以想象的细节(我能想象的每个人),并知道测试坐标。我需要只用数学来实现这一点。具有讽刺意味的是,我曾经在制造业和设计业做过短暂的工作,如果我在这里呆得足够长,我现在就必须学会如何做到这一点。
干杯
奥利 我喜欢人们不包括所有信息的时候。
呵呵:这些天我花了很多时间用各种语言写数学函数,我想每个人都只会思考微积分。 当它有内置功能时就不会了。 内置功能适用于弱者
上述声明可能是我所接受的每个项目的失败。 如果有选项,请使用它。 根据函数的规模(如果它相当小),我倾向于在以下基础上工作-如果有vl*方法,请在不编写自己的函数的情况下使用。 内置功能适用于弱者
(defun GetArcX ( e y / dxf asin l c r s f a g )
;; © Lee Mac 2010
(defun dxf ( c l ) (cdr (assoc c l)))
(defun asin ( x )
(if (< (abs x) 1.0)
(if (equal (abs x) 1.0 1e-
(* x (/ pi 2.))
(atan (/ x (sqrt (- 1.0 (* x x)))))
)
)
)
(setq l (entget e))
(setq c (dxf 10 l) r (dxf 40 l) s (dxf 50 l) f (dxf 51 l))
(if (< f s) (setq s (- s (* 2 pi))))
(if (setq a (asin (/ (- y (cadr c)) r)))
(mapcar
(function
(lambda ( n )
(if (<= s n f)
(list (+ (* r (cos n)) (car c)) y)
)
)
)
(list (- pi a) (rem (+ (* 2 pi) a) (* 2 pi)))
)
)
)
(defun c:test ( / e pt x y )
(if (and (setq e (car (entsel "\nSelect Arc: ")))
(setq p (getpoint "\nPick Y Elevation: "))
(setq x (GetArcX e (cadr (trans p 1 0)))))
(foreach pt x
(if pt
(entmakex (list (cons 0 "POINT") (cons 10 pt)))
)
)
)
)
页:
[1]
2