2012-01-23 138 views
13

我寫了自己的ASCII DXF文件解析器,在某些特定文檔中遇到了橢圓問題。DXF解析器:橢圓角度方向

似乎沒有定義開始和結束參數的角度方向(順時針或逆時針)的「組代碼」。 在大多數情況下,它是逆時針,但不是在所有情況下...

爲了簡化,這裏是一個視覺爲例:

Ellipse1 Ellipse2

正如你所看到的,第一個有起始角度爲135,第二個起始角度爲45 ... 但是,橢圓似乎是相同的(半圓,在左側)...這是因爲第一個角度是順時針的,而第二個是逆時針...

顯然,他們正確地顯示在AutoCAD中,但我的解析器,它們看起來像:

Ellipse3

很簡單,因爲我不知道,如果角度表示順時針或逆時針...

難道我想念一個團體代碼什麼的?我可以看到第一個橢圓「小軸端點」是[200,-200,0],而第二個是[-200,200,0],我想這就是AutoCAD知道角度是CW還是CCW ...但我在DXF文件中所有的是「主軸端點」和「主軸到小軸比」(一個數字)

這裏是DXF文件對應的以下示例:http://www.woofiles.com/dl-279966-ZvoMjamr-c.dxf

+3

解決:我忘記考慮擠出矢量... – ingham

+0

您的問題非常清晰並且有據可查。恭喜!很高興看到你自己解決了這個問題。 – cma

+0

@ingham我建議你採取這個評論,並將其添加爲答案。這對我來說很有價值,我想提出答案以及問題。如果你可以告訴你如何使用擠壓矢量來計算它是否是順時針的,那將更有價值。 – daramarak

回答

1

解決:我忘記拿在帳戶中的擠出矢量

當它是負的(0,0,-1)中,角度必須被視爲CCW代替CW(反之亦然)

2

橢圓可能不在2D XY平面內,所以只使用擠壓方向Z分量的符號是不安全的。下面是一個更爲一般的3D橢圓方法:

1)在XY平面上創建橢圓,主軸在+ X方向,逆時針從開始參數(組碼41)到結束參數(組代碼42)。首先確保結束參數大於start參數,如果不是,則添加2pi。然後,您可以計算出每個點有:

X = [length of major radius] * cos(angle) 
Y = [length of minor radius] * sin(angle) 

2)它旋轉到這個新的座標系:

Direction of new X axis = endpoint of major axis 
Direction of new Z axis = extrusion direction 
Direction of new Y axis = [new Z axis] cross product [new X axis] 

您可以通過其中每列包含正常化這些載體,使一個3x3變換矩陣做到這一點其中一個向量,然後將該矩陣乘以步驟1中創建的橢圓中的每個點。