明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8878|回复: 6

如何求空间两条直线的夹角啊!!!

[复制链接]
发表于 2011-3-16 22:12 | 显示全部楼层
本帖最后由 qjchen 于 2011-3-17 07:24 编辑

如gu_xl版主所说,两根不相交的空间直线要投影到某个平面上才可以求夹角,立体几何中是这么定义的
下面的代码利用矢量点乘的方法,计算空间(也可以是平面上的)两直线间的交角,没有太多的容错
较短的写法如下

  1. ;;;Two line angle
  2. (defun q:geo:2line:ang2(p1 p2 p3 p4)
  3.   ((lambda(x) (atan (sqrt (- 1.0 (* x x))) x))
  4.      (/ (apply '+ (mapcar '* (mapcar '- p2 p1) (mapcar '- p4 p3))) (distance p1 p2) (distance p3 p4))
  5.   )
  6. )
  7. ;;;test
  8. (q:geo:2line:ang2 (setq p1 (list 0 0 0)) (setq p2 (list 1 1 1))(setq p3 (list 0 1 0))(setq p4 (list 1 0 0)))
比较清晰的写法如下(都一样的)

  1. ;;;Arccos
  2. (defun acos(z)
  3. (atan (sqrt (- 1.0 (* z z))) z)
  4. )
  5. ;;;;vec dot product
  6. (defun q:vec:dot*(v1 v2)
  7.   (apply '+ (mapcar '* v1 v2))
  8. )
  9. ;;; Two line angle
  10. (defun q:geo:2line:ang(p1 p2 p3 p4)
  11.   (acos (/ (q:vec:dot* (mapcar '- p2 p1) (mapcar '- p4 p3)) (distance p1 p2) (distance p3 p4)) )
  12. )
  13. ;;;test
  14. (q:geo:2line:ang (setq p1 (list 0 0 0)) (setq p2 (list 1 1 1))(setq p3 (list 0 1 0))(setq p4 (list 1 0 0)))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 20:22 , Processed in 0.240149 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表