如何测量之间的角度
大家好如何测量三维实体的两个表面之间的角度?
和
如何测量三维实体的两个曲面之间的距离(最短)? 两个表面之间的角度可以通过使用以下向量方程找到:
角度=弧心((Na交叉Nb)/(|Na | Nb |))
其中Na和Nb是两个曲面的法向量。
假设p1、p2和p3是曲面上的三个非共线点,以获取平面的法向量
N=(从p1到p2的向量)交叉(从p1到p3的向量)
这是我为Autolisp编写的一个函数,用于计算两个向量的叉积。我相信有人会提供一个更优雅的解决方案。
;;; Compute the cross product of 2 vectors a and 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 2 b))
)
(- (* (nth 0 a) (nth 1 b))
(* (nth 0 b) (nth 1 a))
)
) ;end list
) ;end setq c
) ;end cross
;;
~李 或者,您可以按照点积路线计算角度,即:
(defun二面体(n1-n2)(acos(应用'+(mapcar'*n1-n2)));;反余弦-李;;参数:-1 李,非常感谢。
你能举个例子做测试吗?谢谢 我不确定你想要多少细节作为一个例子。可以创建具有45°倒角边的长方体,以验证计算。您对AutoCAD的VisualLISP有多熟悉?
~李 下面将从每个平面上的3个点计算两个平面之间的二面角。
(定义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
非常感谢,lrm。
此代码必须选择6点。。。只能选择2张脸?
如何选择2张脸?可能可以使用:Solidedit-->face-->copy。。。。。。。。。。。。。
最后可以去掉那个面。。。
也许需要一个选择。选择角度为“锐角”或“钝角”。 阿尔贝托,不客气。很高兴能帮上忙。
~李
页:
[1]