变换矩阵的逆
我有以下代码,它使用NENTSEL返回的转换矩阵将点从模型转换到世界。(defun SXH:transmatrix (mat p)
(setq x (+
(* (car (nth 0 mat)) (car p))
(* (car (nth 1 mat)) (cadr p))
(* (car (nth 2 mat)) (caddr p))
(car (nth 3 mat))))
(setq y (+
(* (cadr (nth 0 mat)) (car p))
(* (cadr (nth 1 mat)) (cadr p))
(* (cadr (nth 2 mat)) (caddr p))
(cadr (nth 3 mat))))
(setq z (+
(* (caddr (nth 0 mat)) (car p))
(* (caddr (nth 1 mat)) (cadr p))
(* (caddr (nth 2 mat)) (caddr p))
(caddr (nth 3 mat))))
(list x y z)
)
我需要从世界转变为模型。我该如何设置这个逆矩阵?
感谢您的帮助!
当做
Hippe013 下面是编写函数的另一种方法(从这里使用mxv):
请注意,由于此处所述的矩阵结构不同,这仅适用于nentsel矩阵,而不适用于nentselp矩阵。
为了求逆矩阵,您可以从这里使用invm函数——不过,您需要将矩阵转换为一个方阵,正如nentselp返回的那样。 李,
我感谢你的帮助!您有一种非常优雅的代码编写方式。
(mapcar '+ (mxv (reverse (cdr (reverse mat))) p) (last mat))
工作得很有魅力!
所以我的下一个问题是如何将由NENTSEL返回的矩阵转换为INVM函数所需的平方矩阵? 非常感谢。
矩阵被转置,nentsel矩阵中的向量行成为nentselp矩阵中的最后一列,并具有额外的(0 0 1)行以生成方形矩阵-这在上面提供的链接I中进行了描述,在链接帖子中,我还提供了执行此转换的函数。
然而,为什么不简单地使用nentselp而不是nentsel呢? 李,
我已经有一段时间没有处理转换了。我目前正在从事一个ObjectDBX项目,在该项目中,我从一个成功的外部参照复制对象。接下来我需要做的是变换所有复制的对象。我有一个vla对象的变体,由vla CopyObjects返回,矩阵由nentsel返回。你会怎么做?
任何帮助,我们都将不胜感激。
当做
Hippe013 李,
此外,我想知道如何将nentsel返回的矩阵转换为vlax TMatrix所需的矩阵。
当做
Hippe013 别担心李!我想出来了!
请参阅:
http://www.theswamp.org/index.php?topic=39876.msg451779#msg451779
请参阅:
http://www.theswamp.org/index.php?topic=40546.msg458445#msg458445 好啊所以,我已经阅读了你提供的链接,这是一个丰富的信息,谢谢你。我原以为我一切正常。我在具有外部参照的线上进行了测试,但在外部参照内的块上进行测试时,nentselp返回的矩阵与选择线时不同。这么说来,我想我需要使用外部参照本身的信息来构建矩阵。一、 e.插入点、x y z比例和旋转。我将不得不研究你的链接多一点,以找出如何建立说矩阵。非常感谢您的帮助!谢谢李。我的最终目标是在外部参照中选择一个对象,找出对象所在的图层,然后将同一图层上的所有对象复制到当前图形中,类似于ncopy,但所有对象都在同一图层上。
当做
Hippe013
页:
[1]