highflybird
发表于 2012-6-6 15:16:19
lzz0517 发表于 2012-6-6 14:58 static/image/common/back.gif
你看看我步骤有没有错,我用了你说的计算椭圆长轴矢量的方法进行计算,但与CAD上进行比较后,对不上CAD上的 ...
我已经提示:
炸开后椭圆的参数已经发生了变化。
所以不能以炸开后的图形作为参照。
lzz0517
发表于 2012-6-6 15:32:41
highflybird 发表于 2012-6-6 15:16 static/image/common/back.gif
我已经提示:
炸开后椭圆的参数已经发生了变化。
所以不能以炸开后的图形作为参照。
如果椭圆参数发生了变化,这个能详细点吗?
因为如果以我们计算的长轴矢量进行起始角度的计算和终止角度的计算的话,画出来的图形会出现位置上的不对,椭圆弧上所有的点都是通过角度进行计算的!
lzz0517
发表于 2012-6-6 15:47:46
这个图是我用那个方法计算出来的矢量,起点矢量,端点矢量分别计算出起始角度,终止角度后绘画出来的结果。
highflybird
发表于 2012-6-6 15:53:56
你可以先求出椭圆在图块内的各点坐标(从你的程序中看出分了64等分,那就是65个点),然后映射到世界坐标系中。
lzz0517
发表于 2012-6-6 16:15:02
本帖最后由 lzz0517 于 2012-6-6 16:16 编辑
这是根据你说的方法进行求解的结果,先读取DXF文件中椭圆弧的参数进行坐标的计算,然后再进行块矩阵的转换计算出世界坐标系下的坐标,如图所示
所以,我觉得还是应该考虑怎么才能求出炸开后椭圆弧在CAD上显示的长轴矢量坐标
highflybird
发表于 2012-6-6 16:19:29
本帖最后由 highflybird 于 2012-6-6 16:21 编辑
lzz0517 发表于 2012-6-6 16:15 static/image/common/back.gif
这是根据你说的方法进行求解的结果,先读取DXF文件中椭圆弧的参数进行坐标的计算,然后再进行块矩阵的转 ...
你没用我83楼讲的方法。
另外我在CAD用那个变换方法能正确创建椭圆弧。
lzz0517
发表于 2012-6-6 16:25:57
本帖最后由 lzz0517 于 2012-6-6 16:27 编辑
用了啊, 我是这样子做的,
for (int i = 0; i < 65;i++ )
{
double ang = sa + i * (ea - sa) / 64; // sa为DXF中的起始弧度,ea为DXF中的终止弧度,
//ra为椭圆弧的倾斜弧度,R为长半径,r为短半径,Insert.Point1为插入点坐标,Insert.cos 为插入点角度余弦值,Insert.sin 为插入点角度正弦值,Scale(x,y,z)为缩放比例,center为DXF中的圆心
double x = R * Math.Cos(ang) * Math.Cos(ra) - r * Math.Sin(ang) * Math.Sin(ra)+center.X;
double y = r * Math.Sin(ang) * Math.Cos(ra) + R * Math.Cos(ang) * Math.Sin(ra)+center.Y;
double xx = Insert.Point1.X + x * Insert.cos * Scale.X - y * Insert.sin * Scale.Y;
double yy = Insert.Point1.Y + y * Insert.cos * Scale.Y + x * Insert.sin * Scale.X;
points.X = (float)xx;
points.Y = (float)yy;
points.Z = center.Z;
}
lzz0517
发表于 2012-6-6 16:32:09
我错了,我忘了乘以这个矩阵了
1 00
0 -1 0
0 0-1
lzz0517
发表于 2012-6-6 16:38:44
那个块中包含块,块中又包含其他图形,线,圆,椭圆等图形的时候,又要怎么样计算他们的坐标呢?
highflybird
发表于 2012-6-6 16:41:23
lzz0517 发表于 2012-6-6 16:38 static/image/common/back.gif
那个块中包含块,块中又包含其他图形,线,圆,椭圆等图形的时候,又要怎么样计算他们的坐标呢?
块中块,就要一层层变换,从最内部开始,乘以块中插入块的变换矩阵,一直乘以到最外层的插入块矩阵。
页:
1
2
3
4
5
6
7
8
[9]
10
11