为了账号安全,请及时绑定邮箱和手机立即绑定

查找 2 个 DrawArc 实例的结束坐标并绘制一条线以“关闭”它

查找 2 个 DrawArc 实例的结束坐标并绘制一条线以“关闭”它

C#
慕姐8265434 2022-12-04 11:08:31
所以,我不是很精通 C#/.Net/PDFSharp 函数,我似乎找不到任何合适的答案来解决我的问题。基本上,我有一个简单的程序,它必须根据用户输入绘制对象的轮廓(它可以是弯曲的等)。我有一个角度的半径和度数来绘制 2 条弧线。在 360 度中,一个圆的半径比用户输入的 X 厚度小,因此两个圆的“内部”与整个草图的厚度相同。最后,我需要程序做的是在弧线的两侧画两条线以“连接它们”以使其成为合适的轮廓,我可以很容易地管理起始线,因为它不是动态的但是终点线取决于半径和角度。如何正确找到我认为的圆弧的结束坐标,以便无论用户输入的半径/厚度/角度如何,它都能在最后成功绘制结束线。这是一些代码,用于说明我如何绘制弧线、起始线以及我尝试找到结束线的失败尝试(它只是将线绘制得离整个草图太远)。输入是用户控件,用户可以在其中输入变量(需要多个但最终只有一个,所以使用用户控件+表单窗口听起来很浪费)。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);希望它能理解我想要的东西,否则我会尽力澄清!
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

也许这样效果更好:


var end_x = CenterX + mmradius * Math.Cos(degrees);

var end_y = CenterY + mmradius * Math.Sin(degrees);

无法尝试运行它,因此可能需要进行更多更改。


查看完整回答
反对 回复 2022-12-04
  • 1 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信