1

頭の最後の髪の毛を引っ張る問題があります。DXF から抽出したデータを使用して、c# winform アプリケーションで斜めの楕円弧を再現するのに苦労しています。

データは次のとおりです。

Centerpoint at X                                  : 597,5; 
Centerpoint at Y                                  : 185; 
Endpoint of major axis, relative to the center (X): 35,9651502358374;
Endpoint of major axis, relative to the center (Y): 60,0542085828599; 
Ratio of minor axis to major axis                 : 0,35714285714286; 
Start parameter                                   : 4,78575772944812;
End parameter                                     : 7,78061288491105; 

コード:

float ex = 597,5;                              //Centerpoint at X
float ey = 185;                                //Centerpoint at Y                                
float exb = 35,9651502358374;                  //Endpoint of major axis (X)                         
float eyb = 60,0542085828599;                  //Endpoint of major axis (Y)                              
float EllipseRatio = 0,35714285714286;                            
double sa = 4,78575772944812;                  //Start parameter                              
double ea = 7,78061288491105;                  //End parameter
sa = double.Parse(exb.ToString()) * Math.Cos(sa) +     //Now it's a Start angle
     double.Parse(eyb.ToString()) * Math.Sin(sa);
ea = 2 * double.Parse(exb.ToString()) * Math.Cos(ea) + //Now it's a sweep angle
     double.Parse(eyb.ToString()) * Math.Sin(ea);
double angle = Math.Atan(exb / eyb);                   //Rotation angle 
Graphics ellipse = this.CreateGraphics();
ellipse.TranslateTransform(ex, ey);                    //So I can rotate at center
ellipse.RotateTransform(float.Parse(angle.ToString()));

ellipse.DrawArc(PreviewPen, (0 - exb), eyb, 2 * exb, 2 * eyb * EllipseRatio, 
                            float.Parse(sa.ToString()), float.Parse(ea.ToString()));

次のようになります。 ここに画像の説明を入力

代わりに、次のようになります。 ここに画像の説明を入力

ご覧のとおり、楕円以外のすべての形状は問題ありません。

私はそれを正しく理解できません。位置を間違えたり、向きを間違えたり、大きさ、形、角度…

ある時点で私は近づきましたが、その後、私の思考エンジンが爆発しました.

私はe.graphicsを使用していません。

できれば詳しく教えてください。

4

0 に答える 0