highflybird 发表于 2012-6-4 11:54:41

本帖最后由 highflybird 于 2012-6-4 12:27 编辑

就是拿 矩阵
-1   0   0
0   1   0
0   0-1
乘以旋转变换后的坐标点
就是说,先用角度算出   椭圆的坐标,然后旋转椭圆的旋转角度,得到新的坐标,再用这个矩阵乘以新的坐标,得到坐标X ,Y,Z,最后加上椭圆的中心坐标,X0,Y0,Z0,这个就是你要求的坐标,
如果要得到CAD显示的坐标,还需要乘以插入块的变换矩阵。

highflybird 发表于 2012-6-4 13:37:30

lr = sqrt(45.66621877367426^2+337.0426302735758^2) =340.12224

sx = 340.12224*cos(2.35439212168697*180/pi) = -240.068877
sy = 340.12224*sin(2.35439212168697*180/pi)*0.9999999999977266 = 240.935826
ra = atan (337.0426302735758/45.66621877367426) = 82.2839294度

sy = -1*sy = -240.935826               ---这一步要注意,就是因为法线矢量(0 0 -1)的缘故。

nsx = -240.068877 * cos(82.2839294) + 240.935826 *sin(82.2839294)+3217176.690239313
nsy = -240.935826 * cos(82.2839294) + (-240.068877)* sin(82.2839294)+532617.0907392278

lzz0517 发表于 2012-6-4 14:00:07

highflybird 发表于 2012-6-4 13:37 static/image/common/back.gif
lr = sqrt(45.66621877367426^2+337.0426302735758^2) =340.12224

sx = 340.12224*cos(2.35439212168697 ...

非常感谢你的耐心回答,终于求得正确的答案,很感谢了!是不是说在进行块内图元坐标求解时,每次进行计算都要把法线矢量(0,0,1)或(0,0,1)加进去求解?

lzz0517 发表于 2012-6-4 14:26:46

本帖最后由 lzz0517 于 2012-6-4 14:27 编辑

乘以这个矩阵也相当旋转180,跟你说的矩阵有什么区别?怎么推导得到你说的矩阵?
1 0 0
0 -1 0
0 0 -1

highflybird 发表于 2012-6-4 14:43:29

如果法线矢量是0,0,1 就没必要做那一步了。
法线矢量相当于Z 方向的矢量。

highflybird 发表于 2012-6-4 18:41:49

lzz0517 发表于 2012-6-4 14:26 static/image/common/back.gif
乘以这个矩阵也相当旋转180,跟你说的矩阵有什么区别?怎么推导得到你说的矩阵?
1 0 0
0 -1 0


一个椭圆本身也有自身的坐标系统,它依据椭圆的长轴方向为X向,短轴方向为Y向,法线矢量为Z向
如果椭圆的法线矢量是(0 0 -1)
而我们这里设定的椭圆是长轴作为自身坐标系的x轴线,那么x矢量为(1 0 0)
矢量 (0 0 -1) 跟(1 0 0)的叉积为 (0 -1 0)
也就是说从这个地方看出,Y的数值要变号。

lzz0517 发表于 2012-6-4 20:04:17

这里还有一个问题,就是椭圆弧的长轴矢量,它又是怎么计算的呢?从CAD上看,都是用长轴的端点坐标与圆心的坐标进行相减求得,但是这个长轴端点怎么求呢?在块中的倾斜的椭圆上,不知道怎么求。在DXF文件中只提供了一个相对于圆心的长轴端点坐标,不知道这个端点坐标是在椭圆坐标系下还是平面坐标系的坐标,还是在块坐标系下的坐标?

我用求起点坐标的方法去求长轴端点坐标,然后与圆心相减得不到对应的长轴矢量;
把DXF文件中提供的相对于圆心的长轴端点坐标当成平面系下的坐标,同样算不出CAD上显示的长轴矢量;

highflybird 发表于 2012-6-4 22:13:12

lzz0517 发表于 2012-6-4 20:04 static/image/common/back.gif
这里还有一个问题,就是椭圆弧的长轴矢量,它又是怎么计算的呢?从CAD上看,都是用长轴的端点坐标与圆心的坐 ...

椭圆的长轴矢量,是在构建椭圆时候指定的。
所以我们可以从DXF码中求得。在lisp中,那就是11 这个组码对应的这个量
在DXF中,就是11 21 31组码形成的矢量。
如果椭圆是在图块内的话,那么这个数值就是块内坐标。
如果椭圆是在模型空间中,那么这个数值就是世界坐标。

lzz0517 发表于 2012-6-5 08:35:57

在块内的椭圆或椭圆弧相对于圆心的长轴端点坐标,这个坐标属于块内坐标系,按理应该是直接加上圆心坐标,再用相对插入点进行旋转平移后得到平面坐标系下的坐标,然后与平面坐标系下的圆心进行相减得到长轴矢量,但是为什么得到的值与CAD上显示的不一样呢?
是不是也要乘以法线矢量的矩阵呢?

highflybird 发表于 2012-6-5 09:18:01

本帖最后由 highflybird 于 2012-6-5 09:26 编辑

一个插入图块如果三维矢量不为(0 0 1)的话,也要乘以这个参数。
长轴矢量是个相对矢量,只是平移的话,不会改变这个数值。另外,图块的缩放(可能是非等比缩放),旋转会改变这个椭圆的长轴值(图块炸开后,椭圆的一些参数会改变)
页: 1 2 3 4 5 [6] 7 8 9 10 11
查看完整版本: 椭圆弧旋转后计算角度问题