乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 8

[编程交流] 变换矩阵的逆

[复制链接]

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:10:06 | 显示全部楼层 |阅读模式
我有以下代码,它使用NENTSEL返回的转换矩阵将点从模型转换到世界。
 
  1. (defun SXH:transmatrix (mat p)
  2.    (setq x (+
  3.       (* (car (nth 0 mat)) (car p))
  4.       (* (car (nth 1 mat)) (cadr p))
  5.       (* (car (nth 2 mat)) (caddr p))
  6.       (car (nth 3 mat))))
  7.    (setq y (+
  8.       (* (cadr (nth 0 mat)) (car p))
  9.       (* (cadr (nth 1 mat)) (cadr p))
  10.       (* (cadr (nth 2 mat)) (caddr p))
  11.       (cadr (nth 3 mat))))
  12.    (setq z (+
  13.       (* (caddr (nth 0 mat)) (car p))
  14.       (* (caddr (nth 1 mat)) (cadr p))
  15.       (* (caddr (nth 2 mat)) (caddr p))
  16.       (caddr (nth 3 mat))))
  17.    (list x y z)
  18.    )

 
我需要从世界转变为模型。我该如何设置这个逆矩阵?
 
感谢您的帮助!
 
当做
 
Hippe013
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:22:51 | 显示全部楼层
下面是编写函数的另一种方法(从这里使用mxv):
请注意,由于此处所述的矩阵结构不同,这仅适用于nentsel矩阵,而不适用于nentselp矩阵。
 
为了求逆矩阵,您可以从这里使用invm函数——不过,您需要将矩阵转换为一个方阵,正如nentselp返回的那样。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:27:36 | 显示全部楼层
李,
 
我感谢你的帮助!您有一种非常优雅的代码编写方式。
 
  1. (mapcar '+ (mxv (reverse (cdr (reverse mat))) p) (last mat))

 
工作得很有魅力!
 
所以我的下一个问题是如何将由NENTSEL返回的矩阵转换为INVM函数所需的平方矩阵?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:33:28 | 显示全部楼层
非常感谢。
 
 
矩阵被转置,nentsel矩阵中的向量行成为nentselp矩阵中的最后一列,并具有额外的(0 0 1)行以生成方形矩阵-这在上面提供的链接I中进行了描述,在链接帖子中,我还提供了执行此转换的函数。
 
然而,为什么不简单地使用nentselp而不是nentsel呢?
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:45:42 | 显示全部楼层
李,
 
我已经有一段时间没有处理转换了。我目前正在从事一个ObjectDBX项目,在该项目中,我从一个成功的外部参照复制对象。接下来我需要做的是变换所有复制的对象。我有一个vla对象的变体,由vla CopyObjects返回,矩阵由nentsel返回。你会怎么做?
 
任何帮助,我们都将不胜感激。
 
当做
 
Hippe013
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 18:50:23 | 显示全部楼层
李,
 
此外,我想知道如何将nentsel返回的矩阵转换为vlax TMatrix所需的矩阵。
 
当做
 
Hippe013
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 19:02:10 | 显示全部楼层
别担心李!我想出来了!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:09:08 | 显示全部楼层
 
请参阅:
http://www.theswamp.org/index.php?topic=39876.msg451779#msg451779
 
 
请参阅:
http://www.theswamp.org/index.php?topic=40546.msg458445#msg458445
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-5 19:11:20 | 显示全部楼层
好啊所以,我已经阅读了你提供的链接,这是一个丰富的信息,谢谢你。我原以为我一切正常。我在具有外部参照的线上进行了测试,但在外部参照内的块上进行测试时,nentselp返回的矩阵与选择线时不同。这么说来,我想我需要使用外部参照本身的信息来构建矩阵。一、 e.插入点、x y z比例和旋转。我将不得不研究你的链接多一点,以找出如何建立说矩阵。非常感谢您的帮助!谢谢李。我的最终目标是在外部参照中选择一个对象,找出对象所在的图层,然后将同一图层上的所有对象复制到当前图形中,类似于ncopy,但所有对象都在同一图层上。
 
当做
Hippe013
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 19:28 , Processed in 0.800364 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表