找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 958|回复: 2

[LISP函数-向量]:两个矢量的叉积

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-8-31 18:59:21 | 显示全部楼层 |阅读模式

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

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

×

  1. ;; ! ****************************************************************************
  2. ;; ! GE_VecCrossProduct
  3. ;; ! ****************************************************************************
  4. ;; ! Function : Computes the cross products of two vectors
  5. ;; !
  6. ;; ! Arguments: 'v1' - First vector
  7. ;; !            'v2' - Second Vector
  8. ;; !
  9. ;; ! Returns  : 'v'  - The cross product of the two vectors
  10. ;; !
  11. ;; ! Comments:  The cross product of two vectors is a vector in a plane
  12. ;; !            perpendicular to the two vectors. This direction is the normal
  13. ;; !            to the plane of the two vectors
  14. ;; ! Theory:    Say you have two vectors
  15. ;; !            A= ax i +  ay j + az k
  16. ;; !            B= bx i +  by j + bz k
  17. ;; !
  18. ;; ! then A X B = (ay bz - az by) i + (az bx - ax bz) j + (ax by - ay bx) k
  19. ;; ! (C) 1999-2004, Four Dimension Technologies, Bangalore
  20. ;; ! e-mail   : [email]rakesh.rao@4d-technologies.com[/email]
  21. ;; ! Web      : [url]www.4d-technologies.com[/url]
  22. ;; ! ****************************************************************************
  23. ;; 矢量差积
  24. ;|两个矢量的叉积
  25.     | i  j  k |
  26. v1xv2 = | x1 y1 z1 |= (y1z2-y2z1, z1x2-z2x1, x1y2-x2y1)
  27.     | x2 y2 z2 |
  28.       
  29. |;
  30. (defun GE_VecCrossProduct (v1 v2)
  31.   (list        (-
  32.           (* (cadr v1) (caddr v2))
  33.           (* (cadr v2) (caddr v1))
  34.         )
  35.         (-
  36.           (* (caddr v1) (car v2))
  37.           (* (caddr v2) (car v1))
  38.         )
  39.         (-
  40.           (* (car v1) (cadr v2))
  41.           (* (car v2) (cadr v1))
  42.         )
  43.   )
  44. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-9-1 23:14:44 | 显示全部楼层
v1 v2一定要3d一下!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-9-4 23:48:23 | 显示全部楼层

  1. ;;;--------------------------------------------------------------------;
  2. ;;;       Function:  VECTOR-NORM                                       ;
  3. ;;;                                                                    ;
  4. ;;;    Description:  This function returns the normal for the          ;
  5. ;;;                  vector supplied.                                  ;
  6. ;;;                                                                    ;
  7. ;;;                  Required Functions:                               ;
  8. ;;;                      trace-vector                                  ;
  9. ;;;                                                                    ;
  10. ;;;      Arguments:                                                    ;
  11. ;;;               vect =  a valid vector list such as:                 ;
  12. ;;;                       '( 5 5 5 )                                   ;
  13. ;;;                                                                    ;
  14. ;;; Returned Value:  A number representing the normal of the vector.   ;
  15. ;;;                                                                       ;
  16. ;;;          Usage: (vector-norm '( 5 5 5))                            ;
  17. ;;;--------------------------------------------------------------------;
  18. (defun vector-norm (vect / nv TransDataA TransData)
  19.   (if (> (vlax-variant-type vect) 8192)
  20.     (setq vect (vlax-safearray->list (vlax-variant-value vect)))
  21.   )
  22.   (setq nv (sqrt (trace-vector (mapcar '* vect vect))))
  23.   ;; Convert to a Variant Array of Doubles here ->
  24.   (if nv
  25.     (progn
  26.       (setq TransDataA (vlax-make-safearray vlax-vbDouble (cons 0 3)))
  27.       (vlax-safearray-fill TransDataA nv)
  28.       (setq TransData (vlax-make-variant
  29.                         TransDataA
  30.                         (logior vlax-vbarray vlax-vbDouble)
  31.                       )
  32.       )
  33.     )
  34.   )
  35. )
  36. ;;;--------------------------------------------------------------------;
  37. ;;;       Function:  TRACE-VECTOR                                      ;
  38. ;;;                                                                    ;
  39. ;;;    Description:  This function supplies the                        ;
  40. ;;;                  Sum of all the elements of a vector.              ;
  41. ;;;                                                                    ;
  42. ;;;      Arguments:                                                    ;
  43. ;;;               vect =  a valid vector list such as:                 ;
  44. ;;;                       '( 5 5 5 )                                   ;
  45. ;;;                                                                    ;
  46. ;;; Returned Value:  A number representing the xxxxxx of the vector.   ;
  47. ;;;                                                                       ;
  48. ;;;          Usage: (trace-vector '( 5 5 5))                           ;
  49. ;;;--------------------------------------------------------------------;
  50. (defun trace-vector (vect)
  51.   (if (> (vlax-variant-type vect) 8192)
  52.     (setq vect (vlax-safearray->list (vlax-variant-value vect)))
  53.   )
  54.   (if (null vect)
  55.     0
  56.     (+ (car vect) (trace-vector (cdr vect)))
  57.   )
  58. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 06:45 , Processed in 0.674317 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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