明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: highflybird

[【高飞鸟】] 【飞鸟集】UCS的变换矩阵及其逆变换矩阵

    [复制链接]
发表于 2012-1-24 15:02 | 显示全部楼层
不错的帖子,正在学习这方面的资料,不过还得慢慢消化
发表于 2012-1-24 23:05 | 显示全部楼层
同上,很好的帖子
发表于 2012-1-26 21:58 | 显示全部楼层
本帖最后由 chlh_jd 于 2012-1-26 21:59 编辑

集大成啊!
获取当前UCS矩阵参数我一直用楼主的版本简化版
  1. (defun ss-getucsarg (/ f x y z o m)
  2.   (if (= (getvar "WORLDUCS") 0)
  3.     (setq f T
  4.     x (getvar "UCSXDIR")
  5.     y (getvar "UCSYDIR")
  6.     z (v^v x y)
  7.     o (getvar "UCSORG")
  8.     m (append
  9.         (mapcar (function  (lambda  (x y)
  10.           (append x (list y))
  11.         )
  12.           )
  13.           (list x y z)
  14.           o
  15.         )
  16.         (list (list 0. 0. 0. 1.))
  17.       )
  18.     )
  19.     (setq f nil)
  20.   )
  21.   (list f m)
  22. )
获取变换矩阵,法国的gile是这样写的,大致和狂刀前辈的简化版相近

  1. (defun gc:TMatrixFromTo  (from to)
  2.   (append
  3.     (mapcar
  4.       (function
  5.   (lambda  (v o)
  6.     (append (trans v from to T) (list o))
  7.   )
  8.       )
  9.       (quote ((1. 0. 0.) (0. 1. 0.) (0. 0. 1.)))
  10.       (trans (list 0. 0. 0.) to from)
  11.     )
  12.     (list (list 0. 0. 0. 1.))
  13.   )
  14. )
  15. ;;(gc:TMatrixFromTo  0 1)或(gc:TMatrixFromTo  1 0)
gile的旋转矩阵
  1. ;; gc:2dRotationMatrix
  2. ;; Returns the 4x4 transformation matrix for a rotation about the Z axis
  3. ;;
  4. ;; Arguments
  5. ;; base: the base point
  6. ;; ang: the angle in radians

  7. (defun gc:2dRotationMatrix (base ang / mat)
  8.   (append
  9.     (mapcar
  10.       (function
  11.    (lambda   (v1 v2)
  12.      (append v1 (list v2))
  13.    )
  14.       )
  15.       (setq mat   (list (list (cos ang) (- (sin ang)) 0)
  16.            (list (sin ang) (cos ang) 0)
  17.            (list 0. 0. 1.)
  18.      )
  19.       )
  20.       (mapcar '- base (mxv mat base))
  21.     )
  22.     (list (list 0. 0. 0. 1.))
  23.   )
  24. )


  25. ;; gc:3dRotationMatrix
  26. ;; Returns the 3d rotation matrix
  27. ;;
  28. ;; Arguments
  29. ;; org: the rotation base point
  30. ;; axis: the rotation axis vector
  31. ;; ang: the angle rotation (radians)

  32. (defun gc:3dRotationMatrix (org axis ang)
  33.   (mxm
  34.     (gc:TMatrixFromTo 0 axis)
  35.     (mxm
  36.       (gc:2dRotationMatrix (trans org 0 axis) ang)
  37.       (gc:TMatrixFromTo axis 0)
  38.     )
  39.   )
  40. )
配套函数

  1. (defun mxv(m v)(mapcar(function(lambda (r)(vxv r v)))m))
  2. ;;
  3. (defun vxv (v1 v2)
  4.   (apply (function +)(mapcar(function *) v1 v2)))
  5. ;;
  6. (defun v^v (v1 v2)
  7.   (list (- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2)))
  8. (- (* (caddr v1) (car v2)) (* (car v1) (caddr v2)))
  9. (- (* (car v1) (cadr v2)) (* (cadr v1) (car v2)))
  10.   )  
  11. )

发表于 2012-4-20 12:08 | 显示全部楼层
都是高人,头晕了
发表于 2012-9-5 16:39 | 显示全部楼层
脑袋大了!
发表于 2013-2-27 16:09 | 显示全部楼层
高飞鸟给出了基本的矩阵运算函数,值得学习。
发表于 2013-4-2 11:00 | 显示全部楼层
请问如何判断究竟是在UCS下还是WCS下?
发表于 2013-4-3 21:05 来自手机 | 显示全部楼层
这个能干什么?什么时候才用到矩阵转换。。。。
发表于 2014-9-2 23:52 | 显示全部楼层
做个记号,好好学习。
发表于 2014-10-14 10:53 | 显示全部楼层
zhcsolution 发表于 2014-10-14 10:34
这样做不是程序员的思路,应该用lisp+Arx 做。

不明白为何要动用到arx,本可以在LISP的范围内解决的,何必牵涉到另外一门语言?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-28 18:07 , Processed in 0.304528 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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