明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: lzz0517

椭圆弧旋转后计算角度问题

  [复制链接]
 楼主| 发表于 2012-6-16 15:48:44 | 显示全部楼层
本帖最后由 lzz0517 于 2012-6-16 15:50 编辑

法线矢量为Az(0,0,-1),假定Y轴矢量为Ay(0,1,0),则X轴矢量为Ax=Ay X Az=(-1,0,0);然后我们就能用这个矩阵进行坐标轴的求解了吗?即
           |Ax.x  Ay.x Az.x|                                         |-1 0  0 |
(x,y,z) * |Ax.y  Ay.y Az.y|     代入上面的矩阵为(x,y,z) * |0  1  0 |   =(-x,y,-z), 这个就是我们要求的结果吗
             |Ax.z  Ay.z Az.z|                                            |0  0 -1 |                                                         
如果不是这样进行求解,那么你说的那个矩阵又是怎么求得的呢?为什么是假定Y轴矢量,而不是假定X轴矢量呢
发表于 2012-6-16 20:17:56 | 显示全部楼层
lzz0517 发表于 2012-6-16 15:48
法线矢量为Az(0,0,-1),假定Y轴矢量为Ay(0,1,0),则X轴矢量为Ax=Ay X Az=(-1,0,0);然后我们就能用这 ...

关于如何从法线矢量得到 变换矩阵,一下子说起来真得很麻烦。
如果你懂lisp就好办些。 有空时候,我说一下这个矩阵的来源。
 楼主| 发表于 2012-6-17 21:54:42 | 显示全部楼层
嗯,静待佳音!
发表于 2012-6-20 10:20:52 | 显示全部楼层
假设一个法线矢量为'(1  2 4)把这个矢量化为单位矢量  得到ZDir : '(0.218218 0.436436 0.872872)
因为这个矢量 的x 和y 数值都大于0.015625,就用 ‘(0 0 1) 跟 '(0.218218 0.436436 0.872872) 叉积,
否则要用 '(0 1 0)跟它叉积。 这样结果是: ‘(-0.436436 0.218218 0.0) ,把这个再单位矢量化,
得到XDir : (-0.894427 0.447214 0.0)   
用ZDir跟XDir 叉积,得到 '(-0.39036 -0.78072 0.48795) ,再把这个单位矢量化(可以省略这一步的)
得到YDir ‘(-0.39036 -0.78072 0.48795) ,因而,得到变换矩阵为为:
( (-0.894427 0.447214 0.0)
  (-0.39036 -0.78072 0.48795)
  (0.218218 0.436436 0.872872)
)
这个就是变换矩阵.




  1. 以下为LISP代码:
  2. ;;;example : (OcsMatrix '(1 2 4))
  3. ;;; OcsMatrix
  4. ;;; Returns the OCS 3x3 matrix (X, Y, Z vectors) from an 'extrusion vector' (zdir)
  5. ;;; the matrix is calculated with the arbitrary axis algorythm.
  6. ;;
  7. ;; Argument : the 'extrusion direction' vector
  8. (defun OcsMatrix (zdir / xdir)
  9.   (or (= 1.0 (distance '(0 0 0) zdir))
  10.       (setq zdir (Normalize zdir))
  11.   )
  12.   (if (and (< (abs (car zdir)) 0.015625)
  13.     (< (abs (cadr zdir)) 0.015625)
  14.       )
  15.     (setq xdir (Normalize (CrossProduct '(0 1 0) zdir)))
  16.     (setq xdir (Normalize (CrossProduct '(0 0 1) zdir)))
  17.   )
  18.   (list xdir (Normalize (CrossProduct zdir xdir)) zdir)
  19. )
  20. ;; CrossProduct
  21. ;; Returns the cross product (vector) of two vectors
  22. ;;
  23. ;; Arguments : two vectors
  24. (defun CrossProduct (v1 v2)
  25.   (list  (- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2)))
  26.   (- (* (caddr v1) (car v2)) (* (car v1) (caddr v2)))
  27.   (- (* (car v1) (cadr v2)) (* (cadr v1) (car v2)))
  28.   )
  29. )
  30. ;; Normalize
  31. ;; Returns the single unit vector
  32. ;;
  33. ;; Argument : a vector
  34. (defun Normalize (v)
  35.   ((lambda (l)
  36.      (if (/= 0 l)
  37.        (mapcar (function (lambda (x) (/ x l))) v)
  38.      )
  39.    )
  40.     (distance '(0 0 0) v)
  41.   )
  42. )

 楼主| 发表于 2012-6-20 14:48:52 | 显示全部楼层
矢量 的x 和y 数值都大于0.015625,就用 ‘(0 0 1) 跟 '(0.218218 0.436436 0.872872) 叉积,
否则要用 '(0 1 0)跟它叉积
这里有个问题,就是这个判断条件是从哪里得到的呢?那本参考书上有介绍呢?根据你的说明,这个矩阵的来历我差不多懂了,只是还有剩下这个问题!
发表于 2012-6-21 00:07:27 | 显示全部楼层
lzz0517 发表于 2012-6-20 14:48
这里有个问题,就是这个判断条件是从哪里得到的呢?那本参考书上有介绍呢?根据你的说明,这个矩阵的来历 ...

这个是经验数,根据lisp的trans函数得到的。
估计是为了避免 出现  '(0 0 1) 跟'(0 0 1) 叉积的结果为 ‘(0 0 0) 这样的情况出现。
所以,对这个经验数字我也了解不多。但的确要这么做,在CAD不这么做,就会变换出错。
 楼主| 发表于 2012-6-21 15:51:33 | 显示全部楼层
非常感谢你的回答,让我走出计算块中椭圆弧起始角度与终止角度的误区!让我找到正确的DXF转换方法!
发表于 2012-12-2 23:53:23 | 显示全部楼层
highflybird 发表于 2012-5-30 10:22
http://www.theswamp.org/index.php?topic=13526.0

这个网页现在打不开了!
显示“The topic or board you are looking for appears to be either missing or off limits to you.Please login below or register an account with TheSwamp. ”
能不能提供下这个网页的内容呀!谢谢!
发表于 2012-12-4 12:10:25 | 显示全部楼层
chenlight 发表于 2012-12-2 23:53
这个网页现在打不开了!
显示“The topic or board you are looking for appears to be either missing  ...

需要注册用户才能打开这个网页。
发表于 2012-12-6 07:12:48 | 显示全部楼层

RE: 椭圆弧旋转后计算角度问题

highflybird 发表于 2012-12-4 12:10
需要注册用户才能打开这个网页。

Vlisp好象有获得椭圆弧圆心、起点、终点、长轴矢量、短轴矢量这五个点的函数,比用组码方便多了。另外那个网站停止注册了?

点评

正是因为楼主不能用 vl函数,他得到的数据只是dxf 数据,所以才会出现楼主这样的问题。  发表于 2013-5-27 15:42
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-24 01:07 , Processed in 0.172267 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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