找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 745|回复: 2

空间两向量(or直线)夹角问题。

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-5-31 12:41:40 | 显示全部楼层 |阅读模式

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

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

×

  1. ;;参数4个坐标点ap1 ap2 bp1 bp2.(全2d or 全3d)
  2. ;;返回(向量ap1->ap2)与(向量bp1->bp2)所夹锐角角度.
  3. (defun xn-ang (ap1 ap2 bp1 bp2 / a-> b-> disa disb disa cosab^2 tan@ @)
  4.   (setq a-> (mapcar '- ap1 ap2))
  5.   (setq b-> (mapcar '- bp1 bp2))
  6.   (setq disa (distance a-> '(0 0 0)))
  7.   (setq disb (distance b-> '(0 0 0)))
  8.   (setq        cos@^2
  9.          (expt (abs (/ (apply '+ (mapcar '* a-> b->)) (* disa disb)))
  10.                2
  11.          )
  12.   )
  13.   (if (equal cos@^2 0)
  14.     90.0
  15.     (setq tan@ (expt (/ (- 1 cos@^2) cos@^2) 0.5)
  16.           @    (atan tan@)
  17.           @    (/ (* @ 180) pi)
  18.     )
  19.   )
  20. )

  21. ;;引用例子空间两直线夹角:
  22. (defun l-ang (l1 l2 / lst1 lst2)
  23.   (setq lst1 (entget l1))
  24.   (setq lst2 (entget l2))
  25.   (xn-ang
  26.     (cdr (assoc 10 lst1))
  27.     (cdr (assoc 11 lst1))
  28.     (cdr (assoc 10 lst2))
  29.     (cdr (assoc 11 lst2))
  30.   )
  31. )

  32. ;;平行
  33. (defun l-px (l1 l2) (equal (l-ang l1 l2) 0))
  34. ;;垂直
  35. (defun l-cq (l1 l2) (equal (l-ang l1 l2) 90))
  36. ;;测试
  37. (defun c:test (/ e1 e2)
  38.   (princ "\n选取第一条直线:")
  39.   (setq e1 (car (entsel)))
  40.   (princ "\n选取第二条直线:")
  41.   (setq e2 (car (entsel)))
  42.   (cond        ((l-px e1 e2) (princ "\n 平行"))
  43.         ((l-cq e1 e2) (princ "\n 垂直"))
  44.         (t
  45.          (princ "\n 角度为:")
  46.          (princ (l-ang e1 e2))
  47.         )
  48.   )
  49.   (princ)
  50. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2006-5-31 22:57:38 | 显示全部楼层
矢量v1 v2
先单位化
求点积k
k=0 垂直
k=1 平行
直角三角形 斜边1 ,和临边k 夹的角
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2006-6-1 06:35:42 | 显示全部楼层
(abs (/ (apply '+ (mapcar '* a-> b->)) (* disa disb)))
就是你说的点积k。
我用的是这个公式cos@=a*b/(|a|*|b|)
当然用佘弦定理也可以的!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 11:19 , Processed in 0.468725 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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