4041186888 发表于 2011-6-25 15:49:28

如何提取得三维线上一点的高?

已知俩个三维点(x y z)(x1 y1 z1),然后画一条三维线(line,xline之类的)。
如何用LISP实现提取这条线上任意一点的z值。

Andyhon 发表于 2011-6-25 16:02:06

...线上任意一点的z值...

Command: (getpoint)
(0.5 1.0 1.5)
Command: (caddr (getpoint))
1.5

4041186888 发表于 2011-6-25 16:06:17

谢谢楼上 不过你可能没懂我的意思
我要写一个程序 让用户任意输入一点 返回这点到直线的垂足 有没有什么函数通过这个垂足的坐标返回出此点的Z值 也就是说只能提供(X Y)

4041186888 发表于 2011-6-25 16:07:12

回复 4041186888 的帖子

呵呵 说白了 我要写一个手动加高小程序

Gu_xl 发表于 2011-6-25 16:38:53

本帖最后由 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
)

zhynt 发表于 2011-6-25 16:57:50


(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]
查看完整版本: 如何提取得三维线上一点的高?