找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1269|回复: 10

[求助] [求助]:能不能讲讲两个矩阵相乘的方法.

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-8-5 16:04:53 | 显示全部楼层 |阅读模式

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

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

×
两个矩阵相乘怎么对应的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-8-5 21:32:35 | 显示全部楼层

Re: [求助]:[求助]:[求助]:能不能讲讲两个矩阵相乘的方法.

最初由 aeo 发布
[B]两个矩阵相乘怎么对应的. [/B]

在Lisp论坛我转贴过一个日文的网页,关于矩阵转换的其中有矩阵相乘的函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-5 22:59:31 | 显示全部楼层

动画教学

excel有,参考一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-8-6 07:27:04 | 显示全部楼层

  1. ;;矩阵相乘
  2. (defun ea:matrix_compose (m1 m2 / n i j tmp ret)
  3.   (setq i 0)
  4.   (repeat (setq n (length (car m1)))
  5.     (setq j   0
  6.           tmp nil
  7.     )
  8.     (repeat n
  9.       (setq tmp        (append        tmp
  10.                         (list (apply
  11.                                 '+
  12.                                 (mapcar
  13.                                   '*
  14.                                   (nth i m1)
  15.                                   (mapcar '(lambda (x) (nth j x)) m2)
  16.                                 )
  17.                               )
  18.                         )
  19.                 )
  20.             j        (1+ j)
  21.       )
  22.     )
  23.     (setq ret (append ret (list tmp))
  24.           i   (1+ i)
  25.     )
  26.   )
  27.   ret
  28. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2003-8-6 22:17:53 | 显示全部楼层
thank you

贴你写的一段
;;矩阵平移一个向量
(defun ea:matrix_SetTranslation        (matrix ve / m1 m2 m3)
  (setq        m1 (car matrix)
        m2 (cadr matrix)
        m3 (nth 2 matrix)
  )
  (list        (list (car m1) (cadr m1) (nth 2 m1) (car ve))
        (list (car m2) (cadr m2) (nth 2 m2) (cadr ve))
        (list (car m3) (cadr m3) (nth 2 m3) (last ve))
        '(0.0 0.0 0.0 1.0)
  )
)

我觉的(car ve)(cadr ve)(caddr ve),是不是应该要加上matrix的本身的值.有可能本来不等于0.

比如:
m1 '((1 0 0 0)(0 1 0 0)(0 0 1 0)(0 0 0 1))
平移 '(5 0)后:(ea:matrix_SetTranslation m1 '(5 0 0))
->m2  '((1 0 0 5.)(0 1 0 0)(0 0 1 0)(0 0 0 1))
再平移 '(5 0)
(ea:matrix_SetTranslation m2 '(5 0 0))
应该为: '((1 0 0 10.)(0 1 0 0)(0 0 1 0)(0 0 0 1))

应该等于:
(ea:matrix_compose
   (ea:matrix_SetTranslation m1 '(5 0 0))
   (ea:matrix_SetTranslation m1 '(5 0 0))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-8-6 22:50:09 | 显示全部楼层
写那个函数时对矩阵的了解还不够,后来的已经改过了

  1. ;;矩阵平移一个向量
  2. (defun ea:matrix_SetTranslation        (matrix ve / pt sys)
  3.   (if (/= (length ve) 3)
  4.     (setq ve (ea:point_3d ve 0.))
  5.   )
  6.   (setq        sys (ea:matrix_getCoordsystem matrix)
  7.         ve  (mapcar '- ve (car sys))
  8.   )
  9.   (ea:matrix_setcoordsystem
  10.     ve
  11.     (cadr sys)
  12.     (caddr sys)
  13.     (last sys)
  14.   )
  15. )
  16. ;;设置坐标系的合作转换矩阵
  17. (defun ea:matrix_setcoordsystem        (pt vx vy vz)
  18.   (if (= (length pt) 2)
  19.     (setq pt (ea:point_3d pt 0.))
  20.   )
  21.   (if (= (length vx) 2)
  22.     (setq vx (ea:point_3d vx 0.))
  23.   )
  24.   (if (= (length vy) 2)
  25.     (setq vy (ea:point_3d vy 0.))
  26.   )
  27.   (if (= (length vz) 2)
  28.     (setq vz (ea:point_3d vz 0.))
  29.   )
  30.   (list        (list (car vx) (car vy) (car vz) (car pt))
  31.         (list (cadr vx) (cadr vy) (cadr vz) (cadr pt))
  32.         (list (last vx) (last vy) (last vz) (last pt))
  33.         '(0. 0. 0. 1.)
  34.   )
  35. )
  36. ;|
  37. 功    能:获得一个转换矩阵的坐标系
  38. 调用格式:(ea:matrix_getcoordsystem <2d or 3d矩阵>)
  39. 返 回 值:表(原点 X轴向量 Y轴向量 Z轴向量)
  40. |;
  41. (defun ea:matrix_getCoordsystem        (matrix / m1 m2 m3)
  42.   (setq        m1 (car matrix)
  43.         m2 (cadr matrix)
  44.         m3 (nth 2 matrix)
  45.   )
  46.   (list        (list (last m1) (last m2) (last m3)) ;orgin pt
  47.         (list (car m1) (car m2) (car m2)) ;vx
  48.         (list (cadr m1) (cadr m2) (cadr m3)) ;vy
  49.         (list (nth 2 m1) (nth 2 m2) (nth 2 m3)) ;vz
  50.   )
  51. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2003-8-6 23:40:17 | 显示全部楼层
ve  (mapcar '- ve (car sys))    是  ve  (mapcar '+ ve (car sys))   吧?

还是我没理解?


(ea:matrix_SetTranslation '((1 0 0 5.)(0 1 0 0)(0 0 1 0)(0 0 0 1)) '(5 0 0))
-->((1 0 0 0.0) (0 1 0 0) (0 0 1 0) (0.0 0.0 0.0 1.0))

还有,你那网站呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-8-7 02:33:09 | 显示全部楼层
http://www.xdcad.net/forum/showt ... d=202824#post202824
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2004-5-26 22:48:04 | 显示全部楼层
1X4的矩阵乘以4X4的矩阵应该是1X4吧?
怎么我用ea:matrix_compose 返回的是4X4呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2004-5-26 23:18:25 | 显示全部楼层
1X4就不能叫 "阵" 了,就是个矢量而已.

--------------------------
“矩阵作用于点(矢量)”,就是我另一贴讲的方法:
(x y z 1)  * 矩阵

也可以(x y z)*矩阵,再(0 0)移动到原点,因为最后一位没加在里面.

"第一行"和"矢量" 点积 为新 x
第二行为Y ...

---------------------------
“点积”: (x y z) dot (a b c)
-->(+ ax by cz)

我以前置顶归类了一个贴,eachy的,和几个其他合并的,不知给谁取消置顶了.
里面有挺详细的“矢量”讲解.
矢量和矩阵是密不可分的,要先懂矢量,关键是它的运用.

---------------------------
“矩阵相乘”其实也是矢量的方法,就是几个矢量列在一起而已.

---------------------------
矩阵作用于实体,其实也是“矩阵作用于点“,cad修改实体的跟"空间关系"有关系的信息,比如dxf10 dxf210等,这个cad已经设置好的,怎么转换,我们没必要搞清楚,只要写对矩阵.(这和这些信息的坐标系有关,搞清楚了,强行转换也是可以的)

----------------------------
;;设置坐标系的合作转换矩阵
(defun ea:matrix_setcoordsystem        (pt vx vy vz)
  (if (= (length pt) 2)
    (setq pt (ea:point_3d pt 0.))
  )
  (if (= (length vx) 2)
    (setq vx (ea:point_3d vx 0.))
  )
  (if (= (length vy) 2)
    (setq vy (ea:point_3d vy 0.))
  )
  (if (= (length vz) 2)
    (setq vz (ea:point_3d vz 0.))
  )
  (list        (list (car vx) (car vy) (car vz) (car pt))
        (list (cadr vx) (cadr vy) (cadr vz) (cadr pt))
        (list (last vx) (last vy) (last vz) (last pt))
        '(0. 0. 0. 1.)
  )
)
这是上面eachy写的;
就是我讲的,写成矩阵后竖过来看,就是你的X Y Z,原点可以一起写进去,当然按上面方法,再平移一下矩阵也一样.

当然,作为矩阵,上面的x y z,都要"单位化"一下,不然错.

"单位化"-->还要看那矢量的贴.
---------------------------


我花了不少的时间(少赚好多钱^_^),
第一贴还是我问的!!!!

晓东很希望大家都了解矩阵。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 13:10 , Processed in 0.335514 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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