找到 2 个 DrawArc 实例的结束坐标并画一条线到 "Close" 它
Finding the End Coordinates of 2 DrawArc instances and drawing a line to "Close" it
所以,我不是很精通 C#/.Net/PDFSharp 函数,我似乎找不到任何合适的答案来解决我的问题。
基本上,我有一个简单的程序,它必须根据用户输入绘制对象的轮廓(它可以是弯曲的等)。
我有一个角度的半径和度数来绘制 2 条弧线。
在 360 度中,一个圆的半径比用户输入的 X 厚度小,因此两个圆的 "inside" 与整个草图的厚度相同。
最后,我需要程序做的是画两条线,在弧线的两侧 "connect them" 使它成为一个合适的轮廓,我可以很容易地管理起始线,因为它不是动态的然而,终点线取决于半径和角度。
如何正确找到我认为的圆弧的结束坐标,以便无论用户输入 Radius/Thickness/Angle.
,它都能在最后成功绘制结束线
下面是一些代码,用于说明我如何绘制弧线、起始线以及我试图找到结束线的失败尝试(只是绘制的线距离整个草图太远)。
输入是用户控件,用户可以在其中输入变量(需要多个但最终只有一个,所以使用用户控件+表单听起来很浪费window)。
mmradius,thickness,mmangle都是用户输入,Innerradius是内圆半径。
var innerradius = Input.mmradius- Input.thickness;
gfx.DrawArc(pen, start_x, start_y, mmradius*2, mmradius*2, 0, mmangle);
gfx.DrawLine(pen, start_x + mmradius+ innerradius, start_y + mmradius,
(start_x + mmradius) + mmradius, start_y + mmradius);
gfx.DrawArc(pen, (start_x + mmradius) - innerradius,
(start_y + mmradius) - innerradius, innerradius*2, innerradius*2, 0, mmangle);
var CenterX = start_x + mmradius;
var CenterY = start_y + mmradius;
double degrees = mmangle * (Math.PI / 180);
var end_x = mmradius + CenterX * Math.Cos(degrees);
var end_y = mmradius + CenterY * Math.Sin(degrees);
gfx.DrawLine(pen, end_x, end_y, end_x - innerradius, end_y - 2);
希望它能理解我想要的东西,否则我会尽力澄清!
也许这样效果更好:
var end_x = CenterX + mmradius * Math.Cos(degrees);
var end_y = CenterY + mmradius * Math.Sin(degrees);
无法尝试 运行,因此可能需要进行更多更改。
所以,我不是很精通 C#/.Net/PDFSharp 函数,我似乎找不到任何合适的答案来解决我的问题。
基本上,我有一个简单的程序,它必须根据用户输入绘制对象的轮廓(它可以是弯曲的等)。
我有一个角度的半径和度数来绘制 2 条弧线。
在 360 度中,一个圆的半径比用户输入的 X 厚度小,因此两个圆的 "inside" 与整个草图的厚度相同。
最后,我需要程序做的是画两条线,在弧线的两侧 "connect them" 使它成为一个合适的轮廓,我可以很容易地管理起始线,因为它不是动态的然而,终点线取决于半径和角度。
如何正确找到我认为的圆弧的结束坐标,以便无论用户输入 Radius/Thickness/Angle.
,它都能在最后成功绘制结束线
下面是一些代码,用于说明我如何绘制弧线、起始线以及我试图找到结束线的失败尝试(只是绘制的线距离整个草图太远)。
输入是用户控件,用户可以在其中输入变量(需要多个但最终只有一个,所以使用用户控件+表单听起来很浪费window)。
mmradius,thickness,mmangle都是用户输入,Innerradius是内圆半径。
var innerradius = Input.mmradius- Input.thickness;
gfx.DrawArc(pen, start_x, start_y, mmradius*2, mmradius*2, 0, mmangle);
gfx.DrawLine(pen, start_x + mmradius+ innerradius, start_y + mmradius,
(start_x + mmradius) + mmradius, start_y + mmradius);
gfx.DrawArc(pen, (start_x + mmradius) - innerradius,
(start_y + mmradius) - innerradius, innerradius*2, innerradius*2, 0, mmangle);
var CenterX = start_x + mmradius;
var CenterY = start_y + mmradius;
double degrees = mmangle * (Math.PI / 180);
var end_x = mmradius + CenterX * Math.Cos(degrees);
var end_y = mmradius + CenterY * Math.Sin(degrees);
gfx.DrawLine(pen, end_x, end_y, end_x - innerradius, end_y - 2);
希望它能理解我想要的东西,否则我会尽力澄清!
也许这样效果更好:
var end_x = CenterX + mmradius * Math.Cos(degrees);
var end_y = CenterY + mmradius * Math.Sin(degrees);
无法尝试 运行,因此可能需要进行更多更改。