找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1086|回复: 2

[讨论]:[0713]夹角公式转LISP计算

[复制链接]
发表于 2006-7-13 08:37:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
[讨论]:[0713]夹角公式转LISP计算

最近看了向量夹角公式,拿来CAD计算一下
发现夹角公式好像不太符合.
不知道是我算错了吗?
请各位看看吧~

另外关于里面讲到平行的原则
不知道怎样比对

烦请各位帮忙解答讨论一下~
谢谢~

参考数学公式网站
http://4a.hep.edu.cn/NCourse/gs/calculus1/CHAP7/INDEX.asp

;夹角公式: ???,与cad不符,附件图档的弧度角值,与CAD不符...

(setq divup (abs (+ (* m1 m2) (* n1 n2) (* p1 p2))))
(setq divdn (* (sqrt (+ (expt m1 2) (expt n1 2) (expt p1 2)))
               (sqrt (+ (expt m2 2) (expt n2 2) (expt p2 2)))
               ))

(setq ang (/ divup divdn))

;;;*******************************
;垂直公式:<正确>
(setq ang_90 (+ (* m1 m2) (* n1 n2) (* p1 p2)))

;;;*******************************
;平行公式: ???,不知如何推演
(/ m1 m2) (/ n1 n2) (/ p1 p2)

;;;*******************************

  1. (setq en_1 (entget(car (entsel"\n select 1:"))))
  2. (setq en_2 (entget(car (entsel"\n select 2:"))))
  3. (setq en_1:10 (cdr (assoc 10 en_1)))
  4. (setq en_1:11 (cdr (assoc 11 en_1)))
  5. (setq en_2:10 (cdr (assoc 10 en_2)))
  6. (setq en_2:11 (cdr (assoc 11 en_2)))

  7. (setq en_1:10:x (car en_1:10))
  8. (setq en_1:10:y (cadr en_1:10))
  9. (setq en_1:10:z (caddr en_1:10))

  10. (setq en_1:11:x (car en_1:11))
  11. (setq en_1:11:y (cadr en_1:11))
  12. (setq en_1:11:z (caddr en_1:11))

  13. (setq en_2:10:x (car en_2:10))
  14. (setq en_2:10:y (cadr en_2:10))
  15. (setq en_2:10:z (caddr en_2:10))

  16. (setq en_2:11:x (car en_2:11))
  17. (setq en_2:11:y (cadr en_2:11))
  18. (setq en_2:11:z (caddr en_2:11))

  19. (setq m1 (- en_1:10:x en_1:11:x))
  20. (setq n1 (- en_1:10:y en_1:11:y))
  21. (setq p1 (- en_1:10:z en_1:11:z))

  22. (setq m2 (- en_2:10:x en_2:11:x))
  23. (setq n2 (- en_2:10:y en_2:11:y))
  24. (setq p2 (- en_2:10:z en_2:11:z))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-7-15 17:48:58 | 显示全部楼层
这个以前发过类似贴子~
[php]
;;参数4个坐标点ap1 ap2 bp1 bp2.(全2d or 全3d)
;;返回(向量ap1->ap2)与(向量bp1->bp2)所夹锐角角度.
(defun xn-ang (ap1 ap2 bp1 bp2 / a-> b-> disa disb disa cosab^2 tan@ @)
  (setq a-> (mapcar '- ap1 ap2))
  (setq b-> (mapcar '- bp1 bp2))
  (setq disa (distance a-> '(0 0 0)))
  (setq disb (distance b-> '(0 0 0)))
  (setq        cos@^2
         (expt (abs (/ (apply '+ (mapcar '* a-> b->)) (* disa disb)))
               2
         )
  )
  (if (equal cos@^2 0)
    90.0
    (setq tan@ (expt (/ (- 1 cos@^2) cos@^2) 0.5)
          @    (atan tan@)
          @    (/ (* @ 180) pi)
    )
  )
)
[/php]
当然如果只是验算平行or垂直可以更好办·!
平行<=>向量叉积为0
垂直<=>向量点积为0
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-15 23:26:40 | 显示全部楼层
"fsxm"您提过
平行<=>向量叉积为0
垂直<=>向量点积为0

但有2个疑问
01.向量叉积计算如何为0呢?返回值是座标的(0,0,0)吧!
02.向量叉积的两线如果不等长,似乎会没结果喔!是否要加上斜率判断呢?

以上的问题我用下面程序练习
若有出错请各位高手也可帮忙解答讨论一下吧~


  1. (defun VecCross (TVectorV1 TVectorV2) ;向量外积
  2. (setq v1 tvectorv1)
  3. (setq v2 tvectorv2)
  4. (setq cx (- (* (nth 1 v1)(nth 2 v2)) (* (nth 1 v2)(nth 2 v1))))
  5. (setq cy (- (* (nth 2 v1)(nth 0 v2)) (* (nth 2 v2)(nth 0 v1))))
  6. (setq cz (- (* (nth 0 v1)(nth 1 v2)) (* (nth 0 v2)(nth 1 v1))))
  7. (setq Cross (list cx cy cz))
  8. Cross
  9. )

  10. (defun C:TEST  ()
  11. (setq en_1 (entget(car (entsel"\n select 1:"))))
  12. (setq en_2 (entget(car (entsel"\n select 2:"))))
  13. (setq en_1:10 (cdr (assoc 10 en_1)))
  14. (setq en_1:11 (cdr (assoc 11 en_1)))
  15. (setq en_2:10 (cdr (assoc 10 en_2)))
  16. (setq en_2:11 (cdr (assoc 11 en_2)))
  17. (setq tvectorv1 (mapcar '- en_1:10 en_1:11))
  18. (setq tvectorv2 (mapcar '- en_2:10 en_2:11))
  19. (setq cross (veccross tvectorv1 tvectorv2))
  20. (if (or (equal cross (list 0.0 0.0 0.0) 0.0))(alert "两线是平行"))
  21. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 17:29 , Processed in 0.346460 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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