请问如何过一点作一条直线的垂线
如题,如何过一个点作一条直线的垂线。谢谢。程序如下。但该程序没有判断是否选取了直线和点,也就是说,没有错误处理
(defun c:per(/ el sp dp ep dsp dep dse al pp spx spy dpx dpy epx epy ppx ppy)
(prompt "请选择直线:")
(setq el (car (entsel)));;;直线图元名
(setq sp (cdr (assoc 10 (entget el))));;;直线起点
(setq dp (cdr (assoc 11 (entget el))));;;直线终点
(prompt "请选择点:")
(setq ep (getpoint));;;已知点选取
(setq dsp (distance ep sp));;;直线起点到选取点距离
(setq dep (distance ep dp));;;直线终点到选取点距离
(setq dse (distance sp dp));;;直线长度
(if
(or
(= dsp (+ dep dse))
(= dep (+ dsp dse))
(= dse (+ dsp dep))
);;;判断
(princ "\n点位于直线上")
(progn
(setq spx (car sp) spy (cadr sp));;;直线起点xy坐标
(setq dpx (car dp) dpy (cadr dp));;;直线终点xy坐标
(setq al (- (angle (list spx spy)(list dpx dpy))(/ pi 2.0)));;;直线的垂线方向角
(if (vla-object el))
(if (setq ep (getpoint "\n请选择点:"))
(progn
(setq cp (vlax-curve-getClosestPointTo obj ep T))
(if (/= (distance ep cp) 0.0)
(entmake (list '(0 . "LINE")(cons 10 ep)(cons 11 cp)))
(princ "\n点位于直线上,三维无解")
)
)
(princ "\n未选取点")
)
)
(princ "\n未选取直线")
)
(princ)
) 新手学习了!!
如果直线外的那个点向直线作垂线时,垂足在延长线上,那么取最近点就不对了!!!
页:
[1]