找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3359|回复: 5

[教学] 和晓东一起学矩阵(3)-- 平移矩阵(重写ACAD命令)

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-11 00:04:11 | 显示全部楼层 |阅读模式

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

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

×
本次教学我们讲矩阵变换最基本的-平移变换(Translation Matrix)

数学背景

QQ截图20130510234739.png



平移变换是矩阵变换最基本的应用,ACAD立面的MOVE、COPY命令就是最典型的平移矩阵变换的应用。

下面我们重写ACAD的COPY命令(无拖动,仅演示COPY的效果):

mCopy-demo.gif

[pcode=lisp,true]
(defun c:mCopy ( / mat mat0 p1 p2 ss v)
  (if (and
          (setq ss (ssget))
          (setq p1 (getpoint "\n基点<退出>:"))
      )
    (progn
      (setq mat0 (xdrx_matrix_identity 3));;三维单位矩阵
      (while (setq p2 (getpoint p1 "\n第二点<退出>:"))
        (progn
           (setq v (mapcar '- p2 p1))   ;;得到点P2和P1的位移,方向是P1指向P2的向量
           (setq mat (xdrx_matrix_setTranslation mat0 v)) ;;得到平移变换矩阵
           (xdrx_entity_transFormedCopy ss mat);;矩阵作用到选择集
        )
      )
    )
  )
  (princ)
)
[/pcode]

如果要重新移动命令MOVE呢?修改下最后的变换函数就可以了,矩阵是一样的。

mMove-demo.gif

[pcode=lisp,true]
(defun c:mMove (/ mat mat0 p1 p2 ss v)
  (if (and
        (and
          (setq ss (ssget))
          (setq p1 (getpoint "\n基点<退出>:"))
          (setq p2 (getpoint p1 "\n第二点<退出>:"))
        )
      )
    (progn
      (setq mat0 (xdrx_matrix_identity 3)) ; 三维单位矩阵
      (setq v (mapcar
                '-
                p2
                p1
              )
      )                                       ; 得到点p2和p1的位移,方向是p1指向p2的向量
      (setq mat (xdrx_matrix_settranslation mat0 v)) ; 得到平移变换矩阵
      (xdrx_entity_transform ss mat) ; 矩阵作用到选择集,和上面COPY命令就差这个函数,这个是移动变换。
    )
  )
  (princ)
)
[/pcode]

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 449个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

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

使用道具 举报

已领礼包: 24个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 01:34 , Processed in 0.393475 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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