C# 如何创建圆形截面?
IDE:VisualStudio2010,c.NET4.0WinForms应用程序 您好,在我的应用程序中,我必须将一个设置在面板圆形图像上的圆形划分为8个部分。请建议如何将其划分为8个部分 范例C# 如何创建圆形截面?,c#,winforms,visual-studio-2010,graphics2d,C#,Winforms,Visual Studio 2010,Graphics2d,IDE:VisualStudio2010,c.NET4.0WinForms应用程序 您好,在我的应用程序中,我必须将一个设置在面板圆形图像上的圆形划分为8个部分。请建议如何将其划分为8个部分 范例 因为我想在这些部分上执行不同的鼠标下移事件。因此,如果您可以建议任何技巧方法或算法或dll或api来解决此问题,则效果会更好。将x、y坐标转换为极坐标半径,即与圆心的角度。然后,如果半径在圆内,则使用“角度”值计算用户单击的线段 例如,如果圆心位于xc、yc,并且在x、y中发生单击,则 将x、y坐标
因为我想在这些部分上执行不同的鼠标下移事件。因此,如果您可以建议任何技巧方法或算法或dll或api来解决此问题,则效果会更好。将x、y坐标转换为极坐标半径,即与圆心的角度。然后,如果半径在圆内,则使用“角度”值计算用户单击的线段 例如,如果圆心位于xc、yc,并且在x、y中发生单击,则
将x、y坐标转换为极坐标半径,即与圆心的角度。然后,如果半径在圆内,则使用“角度”值计算用户单击的线段 例如,如果圆心位于xc、yc,并且在x、y中发生单击,则
问题最好用极坐标表示,而鼠标坐标通常用笛卡尔坐标值表示 若要转换,请计算鼠标位于控件的哪个部分,作为坐标偏移。 例如: 用于将偏移转换为[0,360]度的角度:
var angle = Math.Atan2(yOffset, xOffset)/Math.Pi*180 + 180;
现在使用“角度”值确定您所在的扇区:
int nSectors = 8;
int sectorId = (int)angle/360.0*nSectors;
问题最好用极坐标表示,而鼠标坐标通常用笛卡尔坐标值表示 若要转换,请计算鼠标位于控件的哪个部分,作为坐标偏移。 例如: 用于将偏移转换为[0,360]度的角度:
var angle = Math.Atan2(yOffset, xOffset)/Math.Pi*180 + 180;
现在使用“角度”值确定您所在的扇区:
int nSectors = 8;
int sectorId = (int)angle/360.0*nSectors;
很好,这个算法的名字是什么?嗯,我想它太短了,不配称为算法,但它是从笛卡尔坐标到极坐标的典型转换。请看:,Atan2需要反转参数。非常好,这个算法的名称是什么?我想它太短了,不值得称为算法,但它是从笛卡尔坐标到极坐标的典型转换。请参阅:,Atan2需要反转参数。我添加了负角度检查。我添加了负角度检查。