已知两平面方程,求交线方程
已知两相交平面 A1x+B1y+C1z+D1=0 和 A2x+B2y+C2z+D2=0 平面交线可能平行于 Xy平面或Yz平面或Xz平面 ,令Z=0求出的方程,好像并不是通用的,求大神指点这里提供一个程序,以供参考。
;;;-------------------------------------------------------------
;;; 功能: 求两空间平面的交线
;;; 输入: 两空间平面,满足平面方程: Ax+By+Cz+D=0
;;; 输出: 如果存在交线则输出交线上两点。
;;; 附注: 以后简化这段。
;;;-------------------------------------------------------------
(defun PLANE:Inters (plane1 plane2 / A1 A2 B1 B2 C1 C2 D1 D2 F G H M N)
(setq A1 (car plane1) B1 (cadr plane1) C1 (caddr plane1) D1 (cadddr plane1))
(setq A2 (car plane2) B2 (cadr plane2) C2 (caddr plane2) D2 (cadddr plane2))
(cond
( (/= (setq F (- (* A1 B2) (* A2 B1))) 0)
(setq G (- (* B1 D2) (* B2 D1)))
(setq H (- (* D1 A2) (* D2 A1)))
(setq M (- (* B1 C2) (* B2 C1)))
(setq N (- (* C1 A2) (* C2 A1)))
(list
(list (/ G F) (/ H F) 0)
(list (/ (+ G M) F) (/ (+ H N) F) 1)
)
)
( (/= (setq F (- (* B1 C2) (* B2 C1))) 0)
(setq G (- (* C1 D2) (* C2 D1)))
(setq H (- (* D1 B2) (* D2 B1)))
(setq M (- (* A1 C2) (* A2 C1)))
(setq N (- (* A1 B2) (* A2 B1)))
(list
(list 0 (/ G F) (/ H F) )
(list 1 (/ (+ G M) F) (/ (+ H N) F))
)
)
( (/= (setq F (- (* C1 A2) (* C2 A1))) 0)
(setq G (- (* A1 D2) (* A2 D1)))
(setq H (- (* D1 C2) (* D2 C1)))
(setq M (- (* A1 B2) (* A2 B1)))
(setq N (- (* B1 C2) (* B2 C1)))
(list
(list (/ H F) 0 (/ G F))
(list (/ (+ H N) F) 1 (/ (+ G M) F))
)
)
)
)
多谢鸟叔,我试试 highflybir 发表于 2020-9-8 14:43
这里提供一个程序,以供参考。
你这个结果基本没问题,我 想求得是交线上任意一点,就是靠近鼠标点击处的,因为有的两平面 距离原点0,0,0 太远了,求出来的交线起点 就太远了 纵横八方 发表于 2020-9-17 14:55
你这个结果基本没问题,我 想求得是交线上任意一点,就是靠近鼠标点击处的,因为有的两平面 距离原点0,0, ...
获取已知点的坐标值,然后通过此点的坐标值,和直线的坐标矢量,就可以得到接近点的交线。 太厉害了,正好需要这个
页:
[1]