如何提取得三维线上一点的高?
已知俩个三维点(x y z)(x1 y1 z1),然后画一条三维线(line,xline之类的)。如何用LISP实现提取这条线上任意一点的z值。 ...线上任意一点的z值...
Command: (getpoint)
(0.5 1.0 1.5)
Command: (caddr (getpoint))
1.5 谢谢楼上 不过你可能没懂我的意思
我要写一个程序 让用户任意输入一点 返回这点到直线的垂足 有没有什么函数通过这个垂足的坐标返回出此点的Z值 也就是说只能提供(X Y) 回复 4041186888 的帖子
呵呵 说白了 我要写一个手动加高小程序 本帖最后由 Gu_xl 于 2011-6-25 20:48 编辑
回复 4041186888 的帖子
;;;根据p1 p2 点,计算p3点在p1p2上的投影点,并返回坐标
(defun tt (p1 p2 p3)
(command "line" p1 p2 "")
(setq p3 (vlax-curve-getClosestPointToProjection(entlast) p3 '(0 0 1) t))
(entdel (entlast))
p3
)
(defun c:test ()
(setvar "LUPREC" 4)
(setvar "LUNITS" 2)
(setq ent (entsel "\n选择线上一点"))
(setq pt(cadr ent)
pt1 (cdr (assoc 10 (entget (car ent))))
pt2 (cdr (assoc 11 (entget (car ent))))
)
(prompt
(strcat "\n该点高度为:" (rtos (point_gc pt pt1 pt2)))
)
)
;;;pt为任意点 pt1、pt2必须为三维点
(defun point_gc (pt pt1 pt2)
(setq h1 (caddr pt1)
h2 (caddr pt2)
)
(setq pt1tmp (list (car pt1) (cadr pt1))
pt2tmp (list (car pt2) (cadr pt2))
)
(setq ptangle (angle pt1tmp pt2tmp)
ptn (polar pt (+ (* 0.5 pi) ptangle) 0.01)
jptx (inters pt ptn pt1tmp pt2tmp nil)
)
(setq l(distance pt1tmp pt2tmp)
l1 (distance jptx pt1tmp)
)
(/ (* l1 h2) l)
)
页:
[1]