乐筑天下

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

[编程交流] 如何测量之间的角度

[复制链接]

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 18:19:09 | 显示全部楼层 |阅读模式
大家好
 
如何测量三维实体的两个表面之间的角度?

如何测量三维实体的两个曲面之间的距离(最短)?
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-5 18:35:59 | 显示全部楼层
两个表面之间的角度可以通过使用以下向量方程找到:
 
角度=弧心((Na交叉Nb)/(|Na | Nb |))
 
其中Na和Nb是两个曲面的法向量。
 
假设p1、p2和p3是曲面上的三个非共线点,以获取平面的法向量
 
N=(从p1到p2的向量)交叉(从p1到p3的向量)
 
 
这是我为Autolisp编写的一个函数,用于计算两个向量的叉积。我相信有人会提供一个更优雅的解决方案。
 
  1. ;;; Compute the cross product of 2 vectors a and b
  2. ;;
  3. (defun cross (a b / crs)
  4. (setq        crs (list
  5.       (- (* (nth 1 a) (nth 2 b))
  6.          (* (nth 1 b) (nth 2 a))
  7.       )
  8.       (- (* (nth 0 b) (nth 2 a))
  9.          (* (nth 0 a) (nth 2 b))
  10.       )
  11.       (- (* (nth 0 a) (nth 1 b))
  12.          (* (nth 0 b) (nth 1 a))
  13.       )
  14.     )                                ;end list
  15. )                                        ;end setq c
  16. )                                        ;end cross
  17. ;;

~李
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:37:26 | 显示全部楼层
或者,您可以按照点积路线计算角度,即:
[code](defun二面体(n1-n2)(acos(应用'+(mapcar'*n1-n2)));;反余弦-李;;参数:-1
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 18:46:24 | 显示全部楼层
李,非常感谢。
你能举个例子做测试吗?谢谢
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-5 18:56:06 | 显示全部楼层
我不确定你想要多少细节作为一个例子。可以创建具有45°倒角边的长方体,以验证计算。您对AutoCAD的VisualLISP有多熟悉?
~李
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-5 19:06:59 | 显示全部楼层
下面将从每个平面上的3个点计算两个平面之间的二面角。
[code](定义c:diangle(/p1 p2 p3 n1 n2 ang);计算两个平面之间的二面角;从定义每个平面的3个点开始;获取3个点平面1(setq p1(getpoint“\n为平面1选择点#1”)p2(getpoint“\n为平面1选择点#2”)p3(getpoint“\n为平面1选择点#3”)(setq n1(normal3p p1 p2 p3));法向量平面1;获取3个点平面2(setq p1(getpoint“\n为平面2选择点#1”)p2(getpoint“\n为平面2选择点#2”)p3(getpoint“\n为平面2选择点#3”)(setq n2(normal3p p1 p2 p3));法向量平面2;以度为单位计算角度(setq ang(/(*180.0(二面角n1 n2))3.1415926535))(princ“\n二面角为:”)(princ ang)(princ“°”)(princ));;;平面上3个点的单位法向量(defun normal3p(p1 p2 p3/n d);计算法向量(setq n(交叉(mapcar’-p2 p1)(mapcar’-p3 p1));计算单位向量法向(setq d(distance’(0 0)n))(setq n(mapcar’/n(list d d)));;;2个向量a和b的叉积(defun cross(a b/crs)(setq crs(list)(((((((((nth 1 a)(nth 2 b))(*(nth 1 b)(nth 2 a))((((((((nth 0 b)(nth 2 a))(*(nth 0 a)(nth 1 b))(*(nth 0 b)(nth 1 a))));结束列表);结束setq crs);末端交叉;李-麦克二面体函数和acos函数(defun二面体(n1-n2)(acos(apply'+(mapcar'*n1-n2)));;反余弦-李;;参数:-1
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 19:12:46 | 显示全部楼层
 
非常感谢,lrm。
此代码必须选择6点。。。只能选择2张脸?
如何选择2张脸?可能可以使用:Solidedit-->face-->copy。。。。。。。。。。。。。
最后可以去掉那个面。。。
也许需要一个选择。选择角度为“锐角”或“钝角”。
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-5 19:22:58 | 显示全部楼层
阿尔贝托,不客气。很高兴能帮上忙。
~李
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 20:20 , Processed in 0.390429 second(s), 68 queries .

© 2020-2025 乐筑天下

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